sqoop全量和增量导入数据实操

前言

在Sqoop中,“导入”指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,使用import关键字.
这里采用mysql和hdfs.

1.全量导入

1.1在mysql中创建需要的表:

``
CREATE TABLE order_table(
order_id INT,
buyer VARCHAR(20),
mod_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

这里的mod_time列的值,为当前行数据插入或者数据更新的系统时间

1.2 插入数据

``
INSERT INTO order_table(order_id,buyer) VALUES(1,‘zhangsan’);

查看数据

在这里插入图片描述

1.3 sqoop导入

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/test \
--username root \
--password 000000 \
--table order_table \
--target-dir /user/order_table \
--delete-target-dir \
--num-mappers 1

查看hdfs上文件
在这里插入图片描述
查看内容
命令:hdfs dfs -cat /user/order_table/part-m-00000
结果:
1,zhangsan,2020-10-29 10:15:04.0

1.4 mysql添加数据,再次导入

此时在mysql中再插入一条数据:
``INSERT INTO order_table(order_id,buyer) VALUES(2,‘lisi’);

执行相同的sqoop导入命令.
因为是全量导入,所以会将mysql表中的所有数据导入到hdfs,覆盖之前的文件内容.

命令:hdfs dfs -cat /user/order_table/part-m-00000
结果:
在这里插入图片描述
如果数据量很大,这样是很耗费资源的.这时就可以采用增量导入的方式

2.增量导入

增量导入有两种方式:append-基于递增列的增量数据导入。LastModified-基于时间列的增量数据导入

2.1 append方式

mysql中插入一条新数据
``
INSERT INTO order_table(order_id,buyer) VALUES(3,‘wangwu’);
在这里插入图片描述
sqoop命令:

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/test \
--username root \
--password 000000 \
--table order_table \
--target-dir /user/order_table \
--num-mappers 1 \
--incremental append \
--check-column order_id \
--last-value 2

参数解释:
–incremental append 指定增量导入为append方式
–check-column 指定参考的递增列
–last-value 阈值(int),会将递增列值大于此阈值的所有数据导入

查看hdfs上数据:
在这里插入图片描述
发现多了一个文件part-m-00001
查看此文件内容
在这里插入图片描述
即采用append方式,会新生成一个文件存放增量的内容

2.2 lastmodified 方式

lastmodified里又有两个参数项可选择:1.append 2.merge-key

lastmodified:append

mysql中插入新的数据
``
INSERT INTO order_table(order_id,buyer) VALUES(4,‘maliu’);

在这里插入图片描述

sqoop命令:

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/test \
--username root \
--password 000000 \
--table order_table \
--target-dir /user/order_table \
--num-mappers 1 \
--incremental lastmodified \
--check-column mod_time \
--append \
--last-value "2020-10-29 10:53:00"

参数解释:
–incremental lastmodified 指定增量导入为lastmodified 方式
–check-column 指定时间列
–last-value 阈值,时间大于等于阈值的数据会导入
-append 数据追加,hdfs上会生成新的文件
在这里插入图片描述

查看新生成的文件数据:在这里插入图片描述

lastmodified:merge-key

1.mysql中插入新的数据
``
INSERT INTO order_table(order_id,buyer) VALUES(5,‘qianqi’);

2.将order_id为2的buyer名字改为lisisi
在这里插入图片描述
sqoop导入命令:

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/test \
--username root \
--password 000000 \
--table order_table \
--target-dir /user/order_table \
--num-mappers 1 \
--incremental lastmodified \
--check-column mod_time \
--merge-key order_id \
--last-value "2020-10-29 11:13:26"

参数解释:
–merge-key 指定合并列,对于键值相同的记录会进行合并,底层运行一个完整的mr,最终只生成一个文件

查看hdfs上的文件
hdfs dfs -cat /user/order_table
在这里插入图片描述
查看文件内容:
在这里插入图片描述
发现对于更改的第二条记录,也进行了同步更新.

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值