SQOOP增量抽取

1.在hive中创建一个外部表进行数据测试:

CREATE EXTERNAL TABLE smes_source.test_etl (
    id int ,
name varchar(8),
score int
)
row format delimited fields terminated by '\001'
lines terminated by '\n' 
stored as textfile

location "/data/cdh/hive/hiveExternal/TEST_ETL";

2.将mysql中现有的数据抽取到hive中

sqoop  import --connect jdbc:mysql://10.96.3.8:3306/lOT_DMPS --username galera --password 123456  --table test_etl --target-dir '/data/cdh/hive/hiveExternal/TEST_ETL' --check-column id --incremental append --last-value 1 --null-string '\\N' --null-non-string '\\N' --fields-terminated-by '\001' --lines-terminated-by '\n' -m 1

3.创建sqoop job:

在进行关系型数据库与Hadoop/Hive数据同步的时候,如果使用--incremental选项,如使用append模式,我们需要记录一个--last-value的值,如果每次执行同步脚本的时候,都需要从日志中解析出来这个--last-value的值,然后重新设置脚本参数,才能正确同步,保证从关系型数据库同步到Hadoop/Hive的数据不发生重复的问题。而且,我们需要管理我们使用的这些脚本,每次执行之前可能要获取指定参数值,或者修改参数。Sqoop也提供了一种比较方面的方式,那就是直接创建一个Sqoop job,通过job来管理特定的同步任务。就像我们前面提到的增量同步问题,通过创建sqoop job可以保存上一次同步时记录的--last-value的值,也就不用再费劲去解析获取了,每次想要同步,这个job会自动从job保存的数据中获取到。

创建sqoop job 语句如下:

sqoop  job --create etl_sync_job -- import --connect jdbc:mysql://10.96.3.8:3306/lOT_DMPS --username galera --password 123456  --table test_etl --target-dir '/data/cdh/hive/hiveExternal/TEST_ETL' --check-column id --incremental append --last-value 1 --null-string '\\N' --null-non-string '\\N' --fields-terminated-by '\001' --lines-terminated-by '\n' -m 1

注意:红色字体处,“--”和import中间需有空格,不然会报错




猜你喜欢

转载自blog.csdn.net/fengfengchen95/article/details/80075086