【Sqoop】Sqoop job实现增量导入的原理
我们在使用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实现增量导入的原理相关推荐
- 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 ...
- Sqoop(四)增量导入、全量导入、减量导入
本文转自:https://www.cnblogs.com/yfb918/p/10858355.html 增量导入 一.说明 当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数 ...
- sqoop增量导出mysql_sqoop定时增量导入导出
sqoop使用hsql来存储job信息,开启metastor service将job信息共享,所有node上的sqoop都可以运行同一个job 一.sqoop的配置文件在sqoop.site.xml中 ...
- sqoop 增量导入,不重复
在实际的生产环境下,我们常常是要继续数据增量的导入 核心参数 –check-column 用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳 ...
- sqoop增量导入hdfs和导出
增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...
- 关于sqoop增量导入oracle的数据到HDFS的出现的错误总结
今天在将公司的oracle的数据抽取到hive当中,根据时间字段做增量插入,然后合并采用按照id唯一主键的方式进行合并操作. 下面的代码是增量导入的操作shell脚本 #!/bin/bash date ...
- sqoop job入门 与sqoop增量导入
sqoop job命令选项 sqoop job可以封装一些简单的代码,方便调用 可以创建,删除,执行,列出job,以及查看job. Job management arguments:--create ...
- sqoop增量导入hive_使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)...
最近公司开始做大数据项目,让我使用sqoop(1.6.4版本)导数据进行数据分析计算,然而当我们将所有的工作流都放到azkaban上时整个流程跑完需要花费13分钟,而其中导数据(增量)就占了4分钟左右 ...
- 用sqoop将mysql的数据导入到hive表中,原理分析
Sqoop 将 Mysql 的数据导入到 Hive 中 准备Mysql 数据 如图所示,准备一张表,数据随便造一些,当然我这里的数据很简单. 编写命令 编写参数文件 个人习惯问题,我喜欢把参数写到文件 ...
最新文章
- 解释个人计算机与多用户系统之间的区别,计算机导论问答题答案
- 一种通过scout ESI和CNN解码EEG运动想象四分类任务的新方法
- 【控制】二阶 UGV 的 时间-输入 指标性能最优解算
- 了解Sql Server的执行计划
- Java 从网络上下载文件
- 腾讯优图发布四大平台产品,持续开放视觉AI能力
- [地产]“用90%的时间考虑失败”——李嘉诚(长江实业集团董事长)
- HDU 3564 Another LIS
- AngularJS国际化配置
- 2021-2025年中国电子液体处理系统行业市场供需与战略研究报告
- 浅析GDAL库C#版本支持中文路径问题(续)
- Wi-FiR CC3000 模块
- arm linux vlc移值,vlc-3.0.8在飞凌开发板i.mx6q上移植
- 中断扫描方式子程序c语言,单片机原理及应用(C语言版) 第9章 节 单片机系统配置及接口.ppt...
- trackpoint_为什么TrackPoint键盘是ThinkPad爱好者的好礼物
- gRPC大数据量消息传递方法
- div+css(一)
- 高大上的调音台,一秒变成调音师!
- UrlRewrite
- linux进程网络监控,linux下的进程、网络、性能监控命令