sqoop发行了2个版本,在同一个hadoop集群中不兼容,常用sqoop1的版本:
sqoop1: 1.4.x
sqoop2: 1.99.x版本
相同产品: 阿里DataX
架构
- 客户端直接接入hadoop,通过任务调度生成mapreduce任务.
- 可以对hadoop集群和数据库进行相互的导入导出
sqoop安装部署
基于
hadoop2.x
MapReduce
hive
mysql
hbase
- 下载安装包, 并解压 (sqoop安装在hive客户端的服务器节点上)
- 配置局部环境变量
- 添加数据库驱动包到sqoop解压问价的lib目录下
- 将sqoop解压文件夹的conf目录下的sqoop-env-template.sh模板文件更名为sqoop-env.sh
- 注释代码,修改sqoop解压文件夹下的bin目录下的配置configure-sqoop,去掉HBase、HCatalog、Accumulo等未安装服务相关内容,已经安装可以不用注释
if [ ! -d "${HBASE_HOME}" ]; then
echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
echo 'Please set $HBASE_HOME to the root of your HBase installation.'
fi
if [ ! -d "${HCAT_HOME}" ]; then
echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
fi
if [ ! -d "${ACCUMULO_HOME}" ]; then
echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
fi
- 测试
sqoop version
- 启动mysql
- 连接数据库:
sqoop list-databases -connect jdbc:mysql://[mysql服务器节点ip地址别名]:3306/ -username [数据库用户名] -password [数据库密码]
, list-databases:查看数据库.
例子,查看数据库:sqoop list-databases -connect jdbc:mysql://node01:3306/ -username root -password 123456
例子,查看mysql数据库中的表:sqoop list-tables -connect jdbc:mysql://node01:3306/mysql -username root -password 123456
sqoop参数
- 导入参数
- 导出参数
数据迁入
-1. mysql数据库迁移到HDFS
- 创建脚本 , 集群名称:/hadoop-2.6.5/etc/hadoop/hdfs-site.xml文件中有设置
- 执行脚本或者直接将脚本内容在Linux下一行执行
sqoop
import
--connect jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
-m1
-target
-dir hdfs://Credi/my02
-2. mysql数据库迁移到Hive
2.1导入到配置地址
- 启动hive
- 执行一下命名或脚本,
- hive-import会去找hive环境变量:/apache-hive-1.2.1-bin/conf/hive-site.xml文件下配置的数据存放路径,数据会自动存放在该路径下
- 如果执行前没有启动hive, 找不到环境变量,数据会被存到usr/root本地目录下,并报错
ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 1
sqoop
import
--connect jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
-m1
--hive-import
//hive-import会去找have环境变量:apache-hive-1.2.1-bin/conf/hive-site.xml文件下配置的数据存放路径,数据会自动存放在该路径下
2.2 导入到指定地址
- 将数据导入hive数据库目录下的stu表中,但此时该表无法使用
sqoop
import
--connect jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
-m1
-target-dir hdfs://Credi/user/hive_local/warehouse/stu
- 设计好表结构,手动创建stu表,之后数据会自动导入.
-3. mysql数据库迁移到Hbase
数据导出
-1.从hdfs导出到mysql
- 在mysql建立一张空表
- 执行sqoop命令或脚本
sqoop
export
--connect jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
--export-dir /my02/part-m-00000
- 注意:导入hdfs的数据文件分隔符是’,’ , 导入hive的数据文件分隔符是隐藏分隔符
-2.从hive导出到mysql
- 从hive导出唯一的区别是,hive表的数据分隔符是隐藏分隔符
- 执行如下命令
sqoop
export
--connect
jdbc:mysql://node01:3306/sqoop
--username root
--password 123456
--table stu
--export-dir /user/hive_local/warehouse2/stu/part-m-00000
--input-fields-terminated-by '\001'