Sqoop
什么是Sqoop?
什么是Sqoop?
sqoop其实是一个桥梁,主要在关系型数据库和Hadoop之间进行数据传输,进行数据的导入和导出
关系图
架构图
Sqoop数据传输
RDBMS ->HDFS
mysql到hdfs通过sqoop进行数据传输 分两种,一是只支持新增不支持更新、二是 可以修改和新增
incremental append
只支持新增不支持更新
sqoop import \
--connect jdbc:mysql://ip:3306/ databasename \
--username root \
--password 密码 \
--query "select sid,student_id,course_id,score from score where \$CONDITIONS" \
--target-dir /xxx/xxx \
--split-by sid \
-m 2 \
--check-column sid \
--incremental append \
--last-value 0
解释:
sqoop import
–connect jdbc:mysql://ip:3306/databasename \ 读取数据库表明databasename
–username root #用户名
–password 123456 #密码
–query+sql 最后要加$CONDITION ,哪怕只有一个maptask
–target-dir /path #指的是hdfs中导入表的存放目录
–split-by sid \ 可以理解为分区
-m 2 #并发的map数量2,如果 m 为 1,就不要写split-by
–check-column:column_id #指定增量导入时的参考列
–incremental append #增量导入
–last-value:num #上一次导入column_id的最后一个值
注:
–split-by 和 -m 结合实现numberReduceTasks并行
–check-column 和 --last-value 结合实现–check-column : where ** >value,第二次运行的结果value值是上一次全量导入后的下边界值,第一次为 0.
incremental lastmodified
可以修改和新增
sqoop import \
--connect jdbc:mysql://ip:3306/ databasename \
--username root \
--password 密码 \
--query "select id,name,time from lmtest where \$CONDITIONS" \
--target-dir /xxx/xxx \
--check-column time \
--incremental lastmodified \
--merge-key id \
--last-value "2020-11-20 17:24:28"
解释:
与append不同点:
–last-value 的值是表示的时间到当前系统的时间的时间段
merge 合并
–check-column 必须为timetamp类型
MYSQL->HBASE
(实例)
- 先在hbase内建表
命令如下:
create 'stu:mysql_stu','info','score'
- sqoop导入
sqoop import \
--connect jdbc:mysql://single:3306/kbmysqltest \
--username root \
--password **** \
--table score \
--hbase-table kb10:mysql_stu \
--column-family score \
--hbase-create-table \
--hbase-row-key sid \
--hbase-bulkload
解释:
- import 表示从关系型数据库里传数据给hbase
- 连接mysql里的数据库kbmysqltest
- 用户名
- 密码
- 连接数据库kbmysqltest的表score
- hbase-table 表示连接hbase 的表mysql_stu
- 列族
- hbase中如果表不存在则创建表
- 指定row-key
10.不用指定输出的路径,数据自动转移
结果展示:
Sqoop job
常用命令
- 创建命令
sqoop job \
--create jobname \
-- import \
- 查看job列表
sqoop job --list
- 查看详细信息
sqoop job --show jobname
- 执行
sqoop job --exec jobname
- 删除
sqoop job --delete jobname
注:架构图是copy 安静的技术控,关系图是copy宇晨棒棒的两位大佬的