Sqoop实现自定义job的增量导入
需求:redis缓存的数据隔段时间往MySQL中写入一次。如果按照job的增量导入,比如上次redis向mysql导入数据时间为8:00,下一次导入时间为9:00,8:20sqoop进行增量导入,导入的时*~8:20的数据,sqoop把job中的最后导入时间设置为8:20。当9:00redis向mysql再次导入数据,9:20sqoop会将mysql中8:20~9:20数据导入到hive中,那么8:00~8:20的数据没有导入到hive中。
1、批量创建sqoop job:
#!/bin/bash
set -e
#create sqoop jobs
ret=$(cat tables|wc -l) #tables中存放所有表名
i=1
while [ $i -le $ret ]
do
row=$(sed -n "$i,0p" tables)
sqoop job --create "incre_"$row -- import --connect jdbc:mysql://10.9.1.19:3306/db --table $row --username root --password root -m 1 --hive-import --incremental lastmodified --check-column dtTime --last-value '2015-12-02 10:59:56.0'
#此处last--value可以随意指定
i=`expr $i + 1`
done
sqoop job --list
2、批量删除job
#!/bin/bash
set -e
#create sqoop jobs
ret=$(cat tables|wc -l)
i=1
while [ $i -le $ret ]
do
row=$(sed -n "$i,0p" tables)
sqoop job --delete "incre_"$row
i=`expr $i + 1`
done
sqoop job --list
3、查询最后导入到hive中数据的dtTime值
自动增量导入,实现按照某个字段在hive中最后的值开始的导入,而不是按saved job中指定的值
#获取所有tables文件中指定的表的最后dtTime值,并修改sqoop job的元数据,最后执行job
#!/bin/bash
set -e
#set -x
source ~/.bash_profile
SQOOP_METASTORE=/usr/local/sqoop-1.4.6/metastore/meta.db.script
ret=$(cat tables|wc -l)
i=1
while [ $i -le $ret ]
do
row=$(sed -n "$i,0p" tables)
JOB_NAME="incre_"$row
lastedate=$(hive -e "select max(dtTime) from $row")
echo "lastest time:"$lastedate>>/data/incre.log.d/$JOB_NAME.log
#将时间中的.0替换为.1
newdate=$(echo $lastedate|sed 's/\.0/.1/g')
echo "beginning time:"$newdate>>/data/incre.log.d/$JOB_NAME.log
#替换sqoop的元数据
#cat $SQOOP_METASTORE|grep "'$JOB_NAME','incremental.last.value'"|sed "s/20.*-.*.0/$ret/g"
sed -i "s/'$JOB_NAME','incremental.last.value','.*','SqoopOptions'/'$JOB_NAME','incremental.last.value','$newdate','SqoopOptions'/g" $SQOOP_METASTORE
cat $SQOOP_METASTORE|grep "'$JOB_NAME','incremental.last.value'">>/data/incre.log.d/$JOB_NAME.log
sqoop job --exec $JOB_NAME
i=`expr $i + 1`
done
Sqoop实现自定义job的增量导入的更多相关文章
- 第3节 sqoop:6、sqoop的数据增量导入和数据导出
增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...
- sqoop的增量导入(increment import)
1.import增量导入的官方说明
- sqoop定时增量导入导出
sqoop定时增量导入 2013-11-06 14:23 4553人阅读 评论(0) 收藏 举报 sqoop使用hsql来存储job信息,开启metastor service将job信息共享,所有no ...
- Sqoop增量导入
Argument Description --check-column (col) Specifies the column to be examined when determining which ...
- Sqoop修改sqoop元信息实现job的增量导入
最简单方式是按主键增量导入:http://blog.csdn.net/ggz631047367/article/details/50185319 以下方法只做存档 需求:redis缓存的数据隔段时间往 ...
- sqoop job 增量导入
使用sqoop job做增量导入 在执行导入模式为 incremental 的sqoop job 时,sqoop会获取上次导入操作的 –check-column的value值,也就是说使用sqoop ...
- 大数据之路week07--day07 (Sqoop 从mysql增量导入到HDFS)
我们之前导入的都是全量导入,一次性全部导入,但是实际开发并不是这样,例如web端进行用户注册,mysql就增加了一条数据,但是HDFS中的数据并没有进行更新,但是又再全部导入一次又完全没有必要. 所以 ...
- sqoop job 实现自动增量导入
一.测试环境 1.MySQL表结构 mysql> show create table autoextend\GCREATE TABLE `autoextend` ( `id` bigint(2 ...
- Sqoop(四)增量导入、全量导入、减量导入
增量导入 一.说明 当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数据,导入数仓后进行后续离线分析.这种情况下我们不可能将所有数据重新再导入一遍,所以此时需要数据增量导入. ...
随机推荐
- linux下安装svn
linux下SVN服务器如何搭建和使用 | 浏览:12117 | 更新:2013-09-18 14:28 | 标签:linux linux下SVN服务器如何搭建和使用?说到SVN服务器,想必大家都知道 ...
- 试用fastJSON
实体类 User.java package com.test.fastjson.entity; import java.util.Date; public class User { private L ...
- 【jmter】JDBC进行mysql数据库测试
1.添加线程组 2.添加需要的驱动jar包 使用不同的数据库,我们需要引入不同的jar包. 方式1:直接将jar包复制到jmeter的lib目录 mysql数据库:无需引入其他数据库驱动jar包. s ...
- LintCode "Sliding Window Median" & "Data Stream Median"
Besides heap, multiset<int> can also be used: class Solution { void removeOnly1(multiset<in ...
- (转)Edge实现NodeJS与.NET互操作(包括UI界面示例)
本文转载自:http://blog.csdn.net/kimmking/article/details/42708049 1. Edge是什么 Edge是一种在进程内实现NodeJS与.NET互操作 ...
- (转)在Winform程序中设置管理员权限及为用户组添加写入权限
本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...
- Linux下dig命令使用
Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.由于一直缺失Dig man page文档,本文就权当一个dig使用向导吧. Dig的 ...
- VoLTE、呼叫等待(保持)
VoLTE 的出现是手机通话的革命,VoLTE带来更好通话质量,更快的接通时间,接近0掉线这些特点,还可以一边通话一边上网,一方面VoLTE需要运营商的支持,另外一方面也需要手机终端的支持. 什么手机 ...
- PL/SQL查询Oracle数据乱码/Oracle客户端乱码解决办法
[如果此方法都试了就是不行,那么就重复尝试,先把环境变量给删了,注册表里的键值也删除了,然后重启,再配置,肯定行!我试过!] 先确定Oracle服务器采用的是何种编码: select userenv( ...
- SG函数模板
这篇虽然是转载的,但代码和原文还是有出入,我认为我的代码更好些. 转载自:http://www.cnblogs.com/frog112111/p/3199780.html 最新sg模板: //MAXN ...