目录
Sqoop介绍
- Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。

- Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
sqoop数据传输
一、RDBMS —> HDFS
a.增量导入-incremental append
incremental append -->只支持新增不支持更新;
先将服务启动好之后进行如下操作,这里演示从关系型数据库传输数据至HDFS:
- 实例演示
sqoop import \
--connect jdbc:mysql://single:3306/mysqltest \
--username root \
--password root \
--query "select sid,student_id,course_id,score from score where \$CONDITIONS" \
--target-dir /kb10/mysqlscore1119 \
--split-by sid \
-m 2 \
--check-column sid \
--incremental append \
--last-value 0
- 代码翻译:
* 表示从系型数据库传输数据至HDFS( import);
* 表示连接到mysql的mysqtest数据库(图中的single为服务器的hostname,也可写为ip地址,使用hostname的前提是地址与
hostname做过关联配置);
* 表示连接数据库的用户名;
* 表示连接数据库的密码;
* query为请求的查询语句,后面的$CONDITIONS表示引用查询到的输出结果;
* 表示数据导出的目标路径;
* 这里的split-by与下一行相配合,图上为sid为分割,不同的sid将进行Hash操作之后取余mapreduce的数量,最后的结果决定了
进入哪一个mapreduce内(也可以写成--num-mappers 2 \);
* 表示启动mapredce的数量;
* 从这一行到最后一行配合使用,可以实现增量插入数据,相当于where sid >0;
* 表示使用incremental append增量导入操作;
* 表示增量导入的开始行,这里是第一次导入所以也是全量导入;
- 实例结果展示
运行时代码截图展示,可以见到上下边界值的大小,下边界作为下一次增量导入的上边值;
20/11/19 18:39:23 INFO tool.ImportTool: Incremental import based on column `sid`
20/11/19 18:39:23 INFO tool.ImportTool: Lower bound value: 0
20/11/19 18:39:23 INFO tool.ImportTool: Upper bound value: 60
20/11/19 18:39:23 INFO mapreduce.ImportJobBase: Beginning query import.
- 结果展示
落盘文件数量为2,对应的启动的mapreduce数量,数据查询到第60行结束;

1,1,1,60
2,1,2,59
3,1,3,58
4,1,4,22
5,1,5,59
...
...
58,11,7,99
59,12,3,100
60,12,8,60

Sqoop是用于关系型数据库和Hadoop数据相互转移的工具。它接收命令后转换为MapReduce任务完成数据拷贝。博客详细介绍了Sqoop在RDBMS与HDFS、HBASE、HIVE间的数据传输方式,包括增量导入、单列族和多列族传输等,还提及Hbase数据映射Hive。
最低0.47元/天 解锁文章
941

被折叠的 条评论
为什么被折叠?



