【甘道夫】Sqoop原生增量导入特性探秘

原始思路

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


原生增量导入特性简介

Sqoop提供了原生增量导入的特性,包含以下三个关键参数:

Argument Description
--check-column (col) 指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型(这个很好理解吧)。
--incremental (mode) 指定增量模式,包含“追加模式” append 和“最后修改模式” lastmodified (该模式更满足常见需求)。

--last-value (value) 指定“标志列”上次导入的上界。如果“标志列”是最后修改时间,则--last-value为上次执行导入脚本的时间。

结合Saved Jobs机制,可以实现重复调度增量更新Job时 --last-value 字段的自动更新赋值,再结合cron或者oozie的定时调度,可实现真正意义的增量更新。


实验:增量job的创建和执行   

创建增量更新job:

[email protected]:~/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:

[email protected]:~/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中插入一条数据:

 

再执行一次:

[email protected]:~/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‘) )

时间: 2024-08-01 18:17:13

【甘道夫】Sqoop原生增量导入特性探秘的相关文章

【甘道夫】Sqoop1.4.4 实现将 Oracle10g 中的增量数据导入 Hive0.13.1 ,并更新Hive中的主表

需求 将Oracle中的业务基础表增量数据导入Hive中,与当前的全量表合并为最新的全量表. ***欢迎转载,请注明来源***    http://blog.csdn.net/u010967382/article/details/38735381 设计 涉及的三张表: 全量表:保存了截止上一次同步时间的全量基础数据表 增量表:增量临时表 更新后的全量表:更新后的全量数据表 步骤: 通过Sqoop将Oracle中的表导入Hive,模拟全量表和增量表 通过Hive将"全量表+增量表"合并为

【甘道夫】Hadoop2.2.0环境使用Sqoop-1.4.4将Oracle11g数据导入HBase0.96,并自动生成组合行键

目的: 使用Sqoop将Oracle中的数据导入到HBase中,并自动生成组合行键! 环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz Oracle11g jdk1.7 Ubuntu14 Server 这里关于环境吐槽一句: 最新版本的Sqoop1.99.3功能太弱,只支持导入数据到HDFS,没有别的任何选项,太土了!(如有不同意见欢迎讨论给出解决方案) 命令: sqoop import --connect

【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS

第一步:进入客户端Shell [email protected]:~$ sqoop.sh client Sqoop home directory: /home/fulong/Sqoop/sqoop-1.99.3-bin-hadoop200 Sqoop Shell: Type 'help' or '\h' for help. sqoop:000> set server --host FBI003 --port 12000 --webapp sqoop Server is set successfu

【甘道夫】使用sqoop-1.4.4.bin__hadoop-2.0.4-alpha将Oracle11g数据导入HBase0.96

环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz Oracle11g jdk1.7 Ubuntu14 Server 这里关于环境吐槽一句: 最新版本的Sqoop1.99.3功能太弱,只支持导入数据到HDFS,没有别的任何选项,太土了!(如有不同意见欢迎讨论给出解决方案) 命令: sqoop import --connect jdbc:oracle:thin:@192.168.0.147:1521:ORCLGB

【甘道夫】实现Hive数据同步更新的shell脚本

引言: 上一篇文章<[甘道夫]Sqoop1.4.4 实现将 Oracle10g 中的增量数据导入 Hive0.13.1 ,并更新Hive中的主表>http://blog.csdn.net/u010967382/article/details/38735381 描述了增量更新Hive表的原理和Sqoop,Hive命令,本文基于上一篇文章的内容实现了shell脚本的编写,稍加修改就可用于实际工程. ***欢迎转载,请注明来源***    http://blog.csdn.net/u01096738

【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】

引言: 前面转载过一篇团队兄弟[伊利丹]写的NN HA实验记录,我也基于他的环境实验了NN HA对于Client的透明性. 本篇文章记录的是亲自配置NN HA的详细全过程,以及全面测试HA对客户端访问透明性的全过程,希望对大家有帮助. 实验环境: Hadoop2.2.0的4节点集群,ZK节点3个(ZK节点数最好为奇数个),hosts文件和各节点角色分配如下: hosts: 192.168.66.91 master 192.168.66.92 slave1 192.168.66.93 slave2

【甘道夫】Win7环境下Eclipse连接Hadoop2.2.0

准备: 确保hadoop2.2.0集群正常运行 1.eclipse中建立java工程,导入hadoop2.2.0相关jar包 2.在src根目录下拷入log4j.properties,通过log4j查看详细日志 log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLa

【甘道夫】HBase基本数据操作详解【完整版,绝对精品】

引言 之前详细写了一篇HBase过滤器的文章,今天把基础的表和数据相关操作补上. 本文档参考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 所有代码均基于"hbase 0.96.2-hadoop2"版本编写,均实测通过. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37878701 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空

【甘道夫】Hadoop2.4.1尝鲜部署+完整版配置文件

引言 转眼间,Hadoop的stable版本已经升级到2.4.1了,社区的力量真是强大!3.0啥时候release呢? 今天做了个调研,尝鲜了一下2.4.1版本的分布式部署,包括NN HA(目前已经部署好了2.2.0的NN HA,ZK和ZKFC用现成的),顺便也结合官方文档 http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/ClusterSetup.html  梳理.补全了关键的配置文件属性,将同类属性归