需求: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

最新文章

  1. Git的用法
  2. iOS图表库Charts集成与使用
  3. AC中保存数据与查询数据
  4. Linux 命令行模式 你需要知道的那些事
  5. 报错:'Could not load NIB in bundle: 'NSBundle解决办法
  6. hdu----(2222)Keywords Search(trie树)
  7. Logcat中报内存泄漏MemoryLeak的一次分析
  8. [firefly]暗黑源码解析
  9. jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
  10. WordPress SEO ☞ WordPress网站终极优化指南
  11. 高级UIKit-10(UDPSocket)
  12. 如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析
  13. WebService的基本介绍
  14. php密码对称encrypt加密
  15. npm设置和查看仓库源
  16. mysql外键使用
  17. kali蓝牙连接
  18. javascript 常用获取页面宽高信息 API
  19. 配置tensorflow环境(anaconda+jupyter notebook)
  20. Apache 隐藏 index.php,如将 tp5.com/index.php/hello/123 变成 tp5.com/hello/123

热门文章

  1. 宝洁的Pvp
  2. js 自己创建ready多个可以依次加载
  3. sql2008 将行转为字符串, 将字符串转为行 互转
  4. DIV的垂直居中
  5. erlang接入远程shell
  6. memcache 永久数据被踢
  7. powerdesigner12.5 设置表字符集和存储引擎
  8. Android Please ensure that adb is correctly located at问题解决
  9. c# 对话框交换数据
  10. OAF_VO系列1 - Accelerator Keys