一、核心参数
–check-column
1 | 用来指定一些列,这些列在导入时用来检查做决定数据是否要被作为增量数据,在一般关系型数据库中,都存在类似Last_Mod_Date的字段或主键。 |
–incremental
1 | 用来指定增量导入的模式(Mode),两种模式为: append(附加/一般是指新增的内容)和lastmodified(最新修改的内容) |
–last-value
1 | 指定上一次导入时,检查列指定字段的最大值 |
二、增量模式(Mode)
append
1 | 在导入的新数据ID值是连续时使用,对数据进行附加 |
lastmodified
1 | 在源表(关系型数据库源表)中有数据更新的时候使用,检查列就必须是一个时间戳或日期类型的字段,更新完成之后,last-value会被设置为执行增量导入时的当前系统时间 |
三、增量模式区别
append
1 | 加不加--last-value的区别在于:数据是否冗余,如果不加,则会导入源表中的所有数据导致数据冗余 |
lastmodified
1 | 当使用–incremental lastmodified模式进行导入且导入目录已存在时,就需要使用--merge-key或--append |
四、增量导入-Append模式-示例
1 | 测试环境: |
查看当前bigdata表的–last-value值,然后将全表导入到hdfs中
1 | [hdfs@master1 ~]$ hadoop fs -cat /sqoopim/part-m-00000 |
向MySQL bigdata表新增4条数据
1 | 略 |
增量导入命令
1 | sqoop import --connect jdbc:mysql://10.0.10.100:3306/bigdata --username root -P --table bigdata --target-dir /sqoopim --check-column class_id --incremental append --last-value 18 -m 1 |
执行结果
1 | 19/03/12 16:33:50 INFO mapreduce.ImportJobBase: Transferred 142.0312 KB in 19.3976 seconds (7.3221 KB/sec) |
数据验证
1 | [hdfs@master1 ~]$ hadoop fs -cat /sqoopim/part-m-00001 |
五、增量导入lastmodified模式-示例
- –append附加:提前对表内容做些内容更新
1 | sqoop import --connect jdbc:mysql://10.0.10.100:3306/bigdata --username root -P --table bigdata --target-dir /sqoopim --check-column last_mod_ts --incremental lastmodified --last-value "2019-03-08 17:13:44" -m 1 --append |
数据验证
1 | [hdfs@master1 ~]$ hadoop fs -cat /sqoopim/part-m-00002 |
- –merge-key: 合并字段:
1 | sqoop import --connect jdbc:mysql://10.0.10.100:3306/bigdata --username root -P --table bigdata --target-dir /sqoopim --check-column last_mod_ts --incremental lastmodified --last-value "2019-03-08 17:13:44" -m 1 --merge-key class_id |
1 | --merge-key 按照哪个字段进行合并 |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2019/03/12/Mars-Hadoop-Sqoop增量导入实战/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!