我们在使用Sqoop的增量导入时,需要配置三个参数:

假设有这样的场景:

使用Sqoop每天定时导出emp表的增量数据,其中emp的id列为自增列。

那么此时有两种方式实现:

(1) 每天手工配置last-value,手工调度;

(2) 使用job,给定初始last-value,定时任务每天自动跑批;

相信大多数人会选择第(2)种方式。

为什么job可以给定一次last-value就可以自动抽取增量呢?

这是因为批量每次跑完后,job会把当前check-column的最大值记录到meta中,下次再调起时自动把此值赋给last-value。

meta信息存在哪里呢?

在sqoop-site.xml中有这样的配置:

sqoop.metastore.server.location /tmp/sqoop-metastore/shared.db Path to the shared metastore database files. If this is not set, it will be placed in ~/.sqoop/.

可以发现,sqoop.metastore.server.location就是与元数据相关的保存路径。

如果没有设置,默认路径是:~/.sqoop/

[hadoop@node03 conf]$ cd ~/.sqoop/
[hadoop@node03 .sqoop]$ ll
total 12
-rw-rw-r-- 1 hadoop hadoop  419 Feb 21 19:31 metastore.db.properties
-rw-rw-r-- 1 hadoop hadoop 6198 Feb 21 19:31 metastore.db.script

其中,metastore.db.script文件记录了对last-value的更新操作:

[hadoop@node03 .sqoop]$ cat metastore.db.script |grep incremental.last.value
INSERT INTO SQOOP_SESSIONS VALUES('myjob1','incremental.last.value','1205','SqoopOptions')

上面的例子显示,更新SQOOP_SESSIONS的incremental.last.value为1205

也就是我的实验中最后一次增量的最大值。

下面是完整实验过程,想验证的小伙伴可以参考:

1.mysql中建库,建表并插入测试数据:

create database userdb;
use userdb;create table emp(
id int(11) default null,
name varchar(100) default null,
deg varchar(100) default null,
salary int(11) default null,
dept varchar(10) default null,
create_time timestamp not null default current_timestamp,
update_time timestamp not null default current_timestamp on update current_timestamp,
is_delete bigint(20) default '1'
)
engine = innodb default charset=latin1;insert into emp(id,name,deg,salary,dept) values (1201,'gopal','manager',50000,'TP'),
(1202,'manisha','Proof reader',50000,'TP'),
(1203,'khalil','php dev',30000,'AC'),
(1204,'prasanth','php dev',30000,'AC'),
(1205,'kranthi','admin',20000,'TP');

2.新建sqoop job

bin/sqoop job --create myjob1 -- import \
--connect jdbc:mysql://node03:3306/userdb \
--username root --password 123456 \
--table emp \
--incremental append \
--check-column id \
--last-value 1202 \
--target-dir /sqoop/increment/emp \
-m 1

3.执行job

bin/sqoop job --exec myjob1

4.观察last-value的更新值,发现已经更新为最大值

[hadoop@node03 conf]$ cd ~/.sqoop/
[hadoop@node03 .sqoop]$ cat metastore.db.script |grep incremental.last.value
INSERT INTO SQOOP_SESSIONS VALUES('myjob1','incremental.last.value','1205','SqoopOptions')

【Sqoop】Sqoop job实现增量导入的原理相关推荐

  1. sqoop 1.4.5 增量导入hive 0.12.0

    1:导入命令 1) bin/sqoop import --connect jdbc:mysql://10.x.x.x:3306/lir --username dss --password xxx123 ...

  2. Sqoop(四)增量导入、全量导入、减量导入

    本文转自:https://www.cnblogs.com/yfb918/p/10858355.html 增量导入 一.说明 当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数 ...

  3. sqoop增量导出mysql_sqoop定时增量导入导出

    sqoop使用hsql来存储job信息,开启metastor service将job信息共享,所有node上的sqoop都可以运行同一个job 一.sqoop的配置文件在sqoop.site.xml中 ...

  4. sqoop 增量导入,不重复

    在实际的生产环境下,我们常常是要继续数据增量的导入 核心参数 –check-column 用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳 ...

  5. sqoop增量导入hdfs和导出

    增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...

  6. 关于sqoop增量导入oracle的数据到HDFS的出现的错误总结

    今天在将公司的oracle的数据抽取到hive当中,根据时间字段做增量插入,然后合并采用按照id唯一主键的方式进行合并操作. 下面的代码是增量导入的操作shell脚本 #!/bin/bash date ...

  7. sqoop job入门 与sqoop增量导入

    sqoop job命令选项 sqoop job可以封装一些简单的代码,方便调用 可以创建,删除,执行,列出job,以及查看job. Job management arguments:--create ...

  8. sqoop增量导入hive_使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)...

    最近公司开始做大数据项目,让我使用sqoop(1.6.4版本)导数据进行数据分析计算,然而当我们将所有的工作流都放到azkaban上时整个流程跑完需要花费13分钟,而其中导数据(增量)就占了4分钟左右 ...

  9. 用sqoop将mysql的数据导入到hive表中,原理分析

    Sqoop 将 Mysql 的数据导入到 Hive 中 准备Mysql 数据 如图所示,准备一张表,数据随便造一些,当然我这里的数据很简单. 编写命令 编写参数文件 个人习惯问题,我喜欢把参数写到文件 ...

最新文章

  1. 解释个人计算机与多用户系统之间的区别,计算机导论问答题答案
  2. 一种通过scout ESI和CNN解码EEG运动想象四分类任务的新方法
  3. 【控制】二阶 UGV 的 时间-输入 指标性能最优解算
  4. 了解Sql Server的执行计划
  5. Java 从网络上下载文件
  6. 腾讯优图发布四大平台产品,持续开放视觉AI能力
  7. [地产]“用90%的时间考虑失败”——李嘉诚(长江实业集团董事长)
  8. HDU 3564 Another LIS
  9. AngularJS国际化配置
  10. 2021-2025年中国电子液体处理系统行业市场供需与战略研究报告
  11. 浅析GDAL库C#版本支持中文路径问题(续)
  12. Wi-FiR CC3000 模块
  13. arm linux vlc移值,vlc-3.0.8在飞凌开发板i.mx6q上移植
  14. 中断扫描方式子程序c语言,单片机原理及应用(C语言版) 第9章 节 单片机系统配置及接口.ppt...
  15. trackpoint_为什么TrackPoint键盘是ThinkPad爱好者的好礼物
  16. gRPC大数据量消息传递方法
  17. div+css(一)
  18. 高大上的调音台,一秒变成调音师!
  19. UrlRewrite
  20. linux进程网络监控,linux下的进程、网络、性能监控命令

热门文章

  1. python深拷贝和浅拷贝机制
  2. 名为 cursor_jinserted 的游标不存在_一个工程师必须了解的测量常识,你不知道怎么行...
  3. LDA主题模型(算法详解)
  4. 多个notification引发的问题
  5. JAVA读取属性文件的几种方法
  6. Oracle 备份与恢复学习笔记(14)
  7. Windows Django 开发环境搭建
  8. 关于英特尔物联网你不可不知的10个最新动向
  9. JS不间断无缝滚动 (兼容火狐和IE)
  10. 比较 Python(Python 与其他语言的比较)