sqoop概念
- 开源的数据传输工具,开源;
- 它是hadoop生态圈中的一个第三方模块;
- 它是apache项目,持续不断的更新;
- 快速实现hadoop与传统数据库上的数据传输;
核心技术
- 生成mapreduce任务
- 数据映射
- 作业创建
- 并行控制
hadoop cdh环境sqoop安装
可以直接在管理界面安装sqoop(因为我用的是公司的cdh集群)
常用命令
- sqoop命令说明
sqoop help
- 列出database下的表
sqoop list-tables --connect jdbc:mysql://172.16.0.63/chenyanqiu --username root --password root
数据导入
mysql到hdfs尝试
数据准备
全表导入
–connect :指定Sqoop 连接数据库的 JDBC 驱动,并从
S
Q
O
O
P
H
O
M
E
/
l
i
b
目
录
中
加
载
相
应
的
包
,
其
中
SQOOP_HOME/lib目录中加载相应的包,其中
SQOOPHOME/lib目录中加载相应的包,其中SQOOP_HOME 为 Sqoop 安装的绝对路径;
–username和–password选项用于验证用户访问 MySQL 实例的权限;
–target-dir 选项指定导出数据的存放路径;
-m 1 选项指定 map 的数量;
使用的sqoop import命令最终翻译成 MR 任务执行
sqoop import --connect jdbc:mysql://localhost:3306/logs --username root --password 123456 --table weblogs --target-dir /data/weblogs/import -m 1
如果不指定–target-dir参数,将会在hdfs目录/user/root下生成一个以表名命名的文件夹下存放导入的数据,结果:
使用 Sqoop 导入数据还有很多有用的参数可以配置:
- –as-avrodatafile和–as-sequencefile将数据导入为Avro文件和序列化的文件;
- -z或者–compress参数可以在导入的过程中对数据进行压缩。默认的压缩方式为GZIP压缩;
- –compression-codec 参数使用 Hadoop 支持的任何压缩编码;
- –direct,该参数指示Sqoop直接使用数据库支持的本地导入导出工具。
部分数据导入
方式一:指定列
sqoop import --connect jdbc:mysql://172.16.0.63/chenyanqiu --username root --password root --table person --columns "id,name" --where "id>1"
方式️二:自由sql导入
sqoop import --connect jdbc:mysql://172.16.0.63/chenyanqiu --username root --password root --query "select id,name from person where id>1 and \$CONDITIONS" --target-dir /user/root/person_s -m 1
结果:
增量导入
持续将源数据导入到目标存储位置
核心参数
- -check-clumn:指定增量字段(int类型或者时间类型);
- -last-value:指定上一次的增量字段的值;
- -incremental:指定追加方式(append模式和);
append模式:对数据进行附加,不支持更新数据。比如日志数据收集。
lastmodified模式:在源表中数据更新的时候使用。记录变动需记录时间。
sqoop import --connect jdbc:mysql://172.16.0.63:3306/chenyanqiu --username root --password root --target-dir /user/root/cc --table person -m 1 --check-column id --last-value 3 --incremental append
sqoop导出
sqoop export
sqoop增量导入作业
意图:保存任务执行参数,确保任务可以被重复执行
语法:sqoop job <通用控制参数> <作业控制参数>
创建job
sqoop job --create myjob1 -- import --connect jdbc:mysql://172.16.0.63:3306/chenyanqiu --username root --password root --target-dir /user/root/cc1 --table person -m 1 --check-column id --last-value 1 --incremental append --verbose
查看已创建的job
sqoop job list
查看job详情
sqoop job --show myjob
执行job
sqoop job --exec myjob
定时调度作业调度sqoop作业
定时作业实现方式
- 使用Oozie,定时调度sqoop
- 编写定时程序,定时程序定时调度sqoop作业
- 使用centos自带的调度器crontab实现sqoop任务定时调度
常见问题
- sqoop不支持oracle的字段类型BINARY_DOUBLE到hive:https://issues.apache.org/jira/browse/SQOOP-3089