阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Sqoop1.4.4原生增量导入特性探秘

222次阅读
没有评论

共计 3975 个字符,预计需要花费 10 分钟才能阅读完成。

原始思路

要想实现增量导入,完全可以不使用 Sqoop 的原生增量特性,仅使用 shell 脚本生成一个以当前时间为基准的固定时间范围,然后拼接 Sqoop 命令语句即可。

原生增量导入特性简介
Sqoop 提供了原生增量导入的特性,包含以下三个关键参数:
ArgumentDescription
--check-column (col)指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型(这个很好理解吧)。
--incremental (mode)指定增量模式,包含“追加模式”append 和“最后修改模式”lastmodified (该模式更满足常见需求)
--last-value (value)指定“标志列”上次导入的上界。如果“标志列”是最后修改时间,则 –last-value 为上次执行导入脚本的时间。
 
结合 Saved Jobs 机制,可以实现重复调度增量更新 Job 时 –last-value 字段的自动更新赋值,再结合 cron 或者 oozie 的定时调度,可实现真正意义的增量更新。

实验:增量 job 的创建和执行   
创建增量更新 job:
fulong@FBI006:~/Sqoop/sqoop-1.4.4/bin$ sqoop job –create incretest — import –connect jdbc:Oracle:thin:@192.168.0.138:1521:orcl  –username HIVE –password hivefbi –table FBI_SQOOPTEST –hive-import –hive-table INCRETEST –incremental lastmodified –check-column LASTMODIFIED –last-value ‘2014/8/27 13:00:00’
14/08/27 17:29:37 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
14/08/27 17:29:37 INFO tool.BaseSqoopTool: Using Hive-specific delimiters for output. You can override
14/08/27 17:29:37 INFO tool.BaseSqoopTool: delimiters with –fields-terminated-by, etc.
14/08/27 17:29:37 WARN tool.BaseSqoopTool: It seems that you’ve specified at least one of following:
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –hive-home
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –hive-overwrite
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –create-hive-table
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –hive-table
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –hive-partition-key
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –hive-partition-value
14/08/27 17:29:37 WARN tool.BaseSqoopTool:      –map-column-hive
14/08/27 17:29:37 WARN tool.BaseSqoopTool: Without specifying parameter –hive-import. Please note that
14/08/27 17:29:37 WARN tool.BaseSqoopTool: those arguments will not be used in this session. Either
14/08/27 17:29:37 WARN tool.BaseSqoopTool: specify –hive-import to apply them correctly or remove them
14/08/27 17:29:37 WARN tool.BaseSqoopTool: from command line to remove this warning.
14/08/27 17:29:37 INFO tool.BaseSqoopTool: Please note that –hive-home, –hive-partition-key,
14/08/27 17:29:37 INFO tool.BaseSqoopTool:       hive-partition-value and –map-column-hive options are
14/08/27 17:29:37 INFO tool.BaseSqoopTool:       are also valid for HCatalog imports and exports
 
执行 Job:
fulong@FBI006:~/Sqoop/sqoop-1.4.4/bin$ ./sqoop job –exec incretest
 
注意日志中显示的 SQL 语句:
14/08/27 17:36:23 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(ID), MAX(ID) FROM FBI_SQOOPTEST WHERE (LASTMODIFIED >= TO_DATE(‘2014/8/27 13:00:00‘, ‘YYYY-MM-DD HH24:MI:SS’) AND LASTMODIFIED < TO_DATE(‘2014-08-27 17:36:23‘, ‘YYYY-MM-DD HH24:MI:SS’) )
其中,LASTMODIFIED 的下界是创建 job 的语句中指定的 ,上界是 当前时间2014-08-27 17:36:23
 
验证:
hive> select * from incretest;
OK
2       lion    2014-08-27
Time taken: 0.085 seconds, Fetched: 1 row(s)
 
然后我向 Oracle 中插入一条数据:
 Sqoop1.4.4 原生增量导入特性探秘
 
再执行一次:
fulong@FBI006:~/Sqoop/sqoop-1.4.4/bin$ ./sqoop job –exec incretest
 
日志中显示的 SQL 语句: 
14/08/27 17:47:19 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(ID), MAX(ID) FROM FBI_SQOOPTEST WHERE (LASTMODIFIED >= TO_DATE(‘2014-08-27 17:36:23‘, ‘YYYY-MM-DD HH24:MI:SS’) AND LASTMODIFIED < TO_DATE(‘2014-08-27 17:47:19‘, ‘YYYY-MM-DD HH24:MI:SS’) )
其中,LASTMODIFIED 的下界 上一次执行该 job 的上界 ,也就是说,Sqoop 的“Saved Jobs”机制对于增量导入类 Job,自动记录了上一次的执行时间,并自动将该时间赋值给下一次执行的 –last-value 参数! 也就是说,我们只需要通过 crontab 设定定期执行该 job 即可,job 中的 –last-value 将被“Saved Jobs”机制 自动更新以实现真正意义的增量导入。
 
以上 Oracle 表中新增的数据被成功插入 Hive 表中。
 
再次向 oracle 表中新增一条数据,再次执行该 job,情况依旧,日志中显示上一次的上界自动成为本次导入的下界:
14/08/27 17:59:34 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(ID), MAX(ID) FROM FBI_SQOOPTEST WHERE (LASTMODIFIED >= TO_DATE(‘2014-08-27 17:47:19‘, ‘YYYY-MM-DD HH24:MI:SS’) AND LASTMODIFIED < TO_DATE(‘2014-08-27 17:59:34’, ‘YYYY-MM-DD HH24:MI:SS’) )

通过 Sqoop 实现 Mysql / Oracle 与 HDFS / Hbase 互导数据 http://www.linuxidc.com/Linux/2013-06/85817.htm

[Hadoop] Sqoop 安装过程详解 http://www.linuxidc.com/Linux/2013-05/84082.htm

用 Sqoop 进行 MySQL 和 HDFS 系统间的数据互导 http://www.linuxidc.com/Linux/2013-04/83447.htm

Hadoop Oozie 学习笔记 Oozie 不支持 Sqoop 问题解决 http://www.linuxidc.com/Linux/2012-08/67027.htm

Hadoop 生态系统搭建(hadoop hive hbase zookeeper oozie Sqoop)http://www.linuxidc.com/Linux/2012-03/55721.htm

Hadoop 学习全程记录——使用 Sqoop 将 MySQL 中数据导入到 Hive 中 http://www.linuxidc.com/Linux/2012-01/51993.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3975字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中