最简单方式是按主键增量导入:http://blog.csdn.net/ggz631047367/article/details/50185319

以下方法只做存档

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

  1. #!/bin/bash
  2. set -e
  3. #create sqoop jobs
  4. ret=$(cat tables|wc -l) #tables中存放所有表名
  5. i=1
  6. while [ $i -le $ret ]
  7. do
  8. row=$(sed -n "$i,0p" tables)
  9. 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'
  10. #此处last--value可以随意指定
  11. i=`expr $i + 1`
  12. done
  13. sqoop job --list

2、批量删除job

  1. #!/bin/bash
  2. set -e
  3. #create sqoop jobs
  4. ret=$(cat tables|wc -l)
  5. i=1
  6. while [ $i -le $ret ]
  7. do
  8. row=$(sed -n "$i,0p" tables)
  9. sqoop job --delete "incre_"$row
  10. i=`expr $i + 1`
  11. done
  12. sqoop job --list

3、查询最后导入到hive中数据的dtTime值

  1. 自动增量导入,实现按照某个字段在hive中最后的值开始的导入,而不是按saved job中指定的值
  2. #获取所有tables文件中指定的表的最后dtTime值,并修改sqoop job的元数据,最后执行job
  3. #!/bin/bash
  4. set -e
  5. #set -x
  6. source ~/.bash_profile
  7. SQOOP_METASTORE=/usr/local/sqoop-1.4.6/metastore/meta.db.script
  8. ret=$(cat tables|wc -l)
  9. i=1
  10. while [ $i -le $ret ]
  11. do
  12. row=$(sed -n "$i,0p" tables)
  13. JOB_NAME="incre_"$row
  14. lastedate=$(hive -e "select max(dtTime) from $row")
  15. echo "lastest time:"$lastedate>>/data/incre.log.d/$JOB_NAME.log
  16. #将时间中的.0替换为.1
  17. newdate=$(echo $lastedate|sed 's/\.0/.1/g')
  18. echo "beginning time:"$newdate>>/data/incre.log.d/$JOB_NAME.log
  19. #替换sqoop的元数据
  20. #cat $SQOOP_METASTORE|grep "'$JOB_NAME','incremental.last.value'"|sed "s/20.*-.*.0/$ret/g"
  21. sed -i "s/'$JOB_NAME','incremental.last.value','.*','SqoopOptions'/'$JOB_NAME','incremental.last.value','$newdate','SqoopOptions'/g" $SQOOP_METASTORE
  22. cat $SQOOP_METASTORE|grep "'$JOB_NAME','incremental.last.value'">>/data/incre.log.d/$JOB_NAME.log
  23. sqoop job --exec $JOB_NAME
  24. i=`expr $i + 1`
  25. done

Sqoop修改sqoop元信息实现job的增量导入的更多相关文章

  1. 第3节 sqoop:6、sqoop的数据增量导入和数据导出

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

  2. Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)

    1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...

  3. Apache Sqoop - Overview——Sqoop 概述

    Apache Sqoop - Overview Apache Sqoop 概述 使用Hadoop来分析和处理数据需要将数据加载到集群中并且将它和企业生产数据库中的其他数据进行结合处理.从生产系统加载大 ...

  4. sqoop的增量导入(increment import)

    1.import增量导入的官方说明

  5. Sqoop实现自定义job的增量导入

    需求:redis缓存的数据隔段时间往MySQL中写入一次.如果按照job的增量导入,比如上次redis向mysql导入数据时间为8:00,下一次导入时间为9:00,8:20sqoop进行增量导入,导入 ...

  6. VueJs(12)---vue-router(导航守卫,路由元信息)

    vue-router(导航守卫,路由元信息) 之前泄露两篇有关vue-router博客: VueJs(10)---vue-router(进阶1) VueJs(11)---vue-router(进阶2) ...

  7. sqoop定时增量导入导出

    sqoop定时增量导入 2013-11-06 14:23 4553人阅读 评论(0) 收藏 举报 sqoop使用hsql来存储job信息,开启metastor service将job信息共享,所有no ...

  8. Sqoop之 Sqoop 1.4.6 安装

    1. sqoop数据迁移 1.1 概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具. 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HI ...

  9. vue-router路由元信息及keep-alive组件级缓存

    路由元信息?(黑人问号脸???)是不是这么官方的解释很多人都会一脸懵?那么我们说meta,是不是很多人恍然大悟,因为在项目中用到或者看到过呢? 是的,路由元信息就是我们定义路由时配置的meta字段:那 ...

随机推荐

  1. Linux:finger命令详解

    finger 用于查找并显示用户信息 包括本地与远端主机的用户皆可,帐号名称没有大小写的差别. 单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机, ...

  2. CRect类 的介绍

    类CRect是对Windows结构RECT的封装,凡是能用RECT结构的地方都可以用CRect代替. 结构RECT表示一个矩形的位置和尺寸,其定义为: typedef struct tagRECT{ ...

  3. Photon——Feature Overview 功能概述

    Photon——Feature Overview 功能概述   Feature Overview 功能概述        Photon is a real-time socket server and ...

  4. JavaScript库基本格式写法

    /********************************************************************* * JavaScript库基本格式写法 * 说明: * 由 ...

  5. 关于FreeMarker自定义TemplateDirectiveModel

    [转载来源:http://zwllxs.iteye.com/blog/2036826] java代码如下: import freemarker.core.Environment; import fre ...

  6. Servlet实现验证码图片(一)

    Servlet实现数字字母验证码图片(一): 生成验证码图片主要用到了一个BufferedImage类,如下:

  7. iOS设备是否越狱的判断代码

    苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制.这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所.总体来说,越狱可以让我们随意安装.共享应用,但 ...

  8. 服务器上通过FTP共享文件夹

    近日,公司某服务器共同操作的人员增多,而我只需访问及替换某些文件,故想到共享文件夹. 在IIS中建立ftp站点,添加虚拟目录(可多个,对应不同文件夹),设置允许访问的用户(添加用户,见在IIS上搭建F ...

  9. c#代码加密

    源代码保护:怎样利用MaxtoCode加密dotNet源代码 http://www.webkaka.com/blog/archives/MaxtoCode-encrypt-dotnet-program ...

  10. Fiddler+Firefox

    配置置代理了,发现还是不好用!无法抓包: 配置就是在firefox的“选项”,拉到最下面,就能够看到“网络代理”,点进去:手动代理里面输入Fiddler的代理信息(默认127.0.0.1:8888) ...