大数据之路week07--day07 (Sqoop 从mysql增量导入到HDFS)

我们之前导入的都是全量导入,一次性全部导入,但是实际开发并不是这样,例如web端进行用户注册,mysql就增加了一条数据,但是HDFS中的数据并没有进行更新,但是又再全部导入一次又完全没有必要。

所以,sqoop提供了增量导入的方法。

1、数据准备:

2、将其先用全量导入到HDFS中去

3、先在mysql中添加一条数据,在使用命令进行追加

 #指定字段的取值范围,增量到数据(指的是Mysql增加了一条或多条数据,追加到HDFS中去,
 如果想追加到hive本来的数据中去就把路径换成hve的路径)
 # 适用于表不断的有新数据插入
 
sqoop import \
--connect jdbc:mysql://master:3306/student \
--username root \
--password 123456 \
--table student_zeng \
--target-dir /user/hive/warehouse/sqlhivetest.db/student_zeng/ \
--split-by id \
-m 1 \
--fields-terminated-by '\t' \
--incremental append \
--check-column id \
--last-value 3

4、根据时间进行大量追加(不去重)

 1 追加  
 2 sqoop import \
 3 --connect jdbc:mysql://master:3306/student \
 4 --username root \
 5 --password 123456 \
 6 --target-dir /user/hive/warehouse/sqlhivetest.db/student_zeng/ \
 7 --table student_zeng \
 8 --fields-terminated-by '\t' \
 9 --check-column last_mod \
10 --incremental lastmodified \
11 --last-value "2019-12-19 20:57:16" \
12 -m 1 \
13 --append 

结果:但是我们发现有两个重复的字段

5、往往开发中需要进行去重操作:sqoop提供了一个方法进行去重,内部是先开一个map任务将数据导入进来,然后再开一个map任务根据指定的字段进行合并去重

#根据业务可能需要去重  -merge-key 就是做这个事

sqoop import \
--connect jdbc:mysql://master:3306/student \
--username root \
--password 123456 \
--target-dir /user/hive/warehouse/sqlhivetest.db/student_zeng/ \
--table student_zeng \
--fields-terminated-by '\t' \
--check-column last_mod \
--incremental lastmodified \
--last-value "2019-12-19 22:00:09" \
-m 1 \
-merge-key id 

结果:

 之前有重复的也进行合并去重操作,最后生成一个结果。

猜你喜欢

转载自www.cnblogs.com/wyh-study/p/12079670.html