oozie定时循环调度sqoop job 增量导数入hive

标签: oozie 循环 调度 | 发表时间:2013-07-28 15:28 | 作者:angela
出处:http://blog.sina.com.cn/u/2150029882

假设oracle里面有一个student表每10分钟有一批新增的数据,现在想要把数据同步到hive,实现思路是用oozie的coordinator定义一个job,job里面调度workflow用sqoop从oracle里增量导数入hive。具体过程如下:

 

利用coordinate每隔10分钟调度一次sqoop从oracle增量取数到hive的job,要注意coordinator.xml中的时间设置,oozie的时间是UTC,美国的太平洋标准时间PST8PDT是西8区,就是比国际时间UTC慢8小时,而北京时间是东8区,比UTC快8小时,所以若现在北京时间是2013年7月29日16点30分,想要定义一个job是在2013年7月29日17点00分开始运行,则coordinator.xml中的开始运行时间要设置为(17-8=9):

start=2013-07-29T09:00Z

job properites:

nameNode=hdfs://BigInsightMaster:9000

jobTracker=BigInsightMaster:9001

queueName=default

examplesRoot=examples


oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/cron

start=2013-07-29T08:00Z

end=2013-07-29T08:20Z

oozie.use.system.libpath=true

workflowAppUri=${nameNode}/user/${user.name}/${examplesRoot}/apps/sqoop


workflow.xml:

<coordinator-app name="cron-coord" frequency="${coord:minutes(10)}" start="${start}" end="${end}" timezone="UTC"

                 xmlns="uri:oozie:coordinator:0.2">

        <action>

        <workflow>

            <app-path>${workflowAppUri}</app-path>

            <configuration>

                <property>

                    <name>jobTracker</name>

                    <value>${jobTracker}</value>

                </property>

                <property>

                    <name>nameNode</name>

                    <value>${nameNode}</value>

                </property>

                <property>

                    <name>queueName</name>

                    <value>${queueName}</value>

                </property>

            </configuration>

        </workflow>

    </action>

</coordinator-app>

一、oozie调度sqoop直接导数入hive --全量

 import --hive-import --connect jdbc:oracle:thin:@192.168.1.8:1521:ORCL --username SCOTT --password tiger --table STUDENT -m 1

二、oozie调度sqoop直接导数入hive --增量

import --hive-import --connect jdbc:oracle:thin:@192.168.1.8:1521:ORCL --username SCOTT --password tiger  -m 1 --table STUDENT --check-column SID --incremental append --last-value 4

 

若要用配置文件

            --options-file importoracle.txt --table STUDENT --check-column SID --incremental append --last-value 0

            importoracle.txt#importoracle.txt

#

# Options file for Sqoop import

#

 

# Specifies the tool being invoked

import

--hive-import

 

# Connect parameter and value

--connect

jdbc:oracle:thin:@192.168.1.8:1521:ORCL

 

# Username parameter and value

--username

SCOTT

 

# password parameter and value

--password

tiger

 

# m

-m

1

#

# Remaining options should be specified in the command line.

#

三、oozie调度sqoop job 增量导数入hive

oozie调度shell和sqoop 一样,用一个mapreduce程序调度,在hadoop集群随机选择一个node(namenode或者datanode)运行shell或者sqoop job,所以sqoop-site.xml应该在所有的node上是一样的配置,需要在所有node上的sqoop-site.xml中设置sqoop.metastore.client.record.password为true,若只在namenode上设置,oozie调度sqoop的job的时候还是会报错:

 [main] ERROR org.apache.sqoop.manager.OracleManager  - Failed to list columns

java.sql.SQLException: ORA-01005: null password given; logon denied

因为是随机选一个node执行sqoop job,而sqoop job的元数据信息是存储在hsqldb关系型数据库中的,sqoop的metastore默认是存储在$HOME/.sqoop/下的,是存储在本地的,如果只在namenode上建job,若oozie把sqoop job分配给其他node执行,就会报错:

ERROR org.apache.sqoop.tool.JobTool  - I/O error performing job operation: java.io.IOException: Cannot restore missing job stujob

因为在其他node的本地metastore里面没有相关job的信息,job的信息只有namenode才有。虽然sqoop metastore可以通过sqoop-site.xml里面的

sqoop.metastore.server.location修改本地存储路径,通过sqoop.metastore.client.autoconnect.url设置metastore connecturl,但是要在oozie中执行,必须用share metastore。

1)启动 share metastore service,命令:

bin/sqoop metastore






2)修改sqoop-site.xml中的sqoop.metastore.server.port 为16000

  设置sqoop.metastore.server.location 为/tmp/sqoop-metastore/shared.db

3)创建job

bin/sqoop job --meta-connect jdbc:hsqldb:hsql://BigInsightMaster:16000/sqoop --create stujob -- import --hive-import --connect jdbc:oracle:thin:@192.168.1.8:1521:ORCL --username SCOTT --password tiger  -m 1 --table STUDENT --check-column SID --incremental append --last-value 0



注意参数--meta-connect jdbc:hsqldb:hsql://BigInsightMaster:16000/sqoop 的顺序,若放在最后面会执行失败,例如

bin/sqoop job --create stujob -- import --hive-import --connect jdbc:oracle:thin:@192.168.1.8:1521:ORCL --username SCOTT --password tiger  -m 1 --table STUDENT --check-column SID --incremental append --last-value 0 --meta-connect jdbc:hsqldb:hsql://BigInsightMaster:16000/sqoop



bin/sqoop job --meta-connect jdbc:hsqldb:hsql://BigInsightMaster:16000/sqoop --list



bin/sqoop job --meta-connect jdbc:hsqldb:hsql://BigInsightMaster:16000/sqoop --delete stujob

4)在hive中预先建student表



5)设置oozie的workfow.xml如下(其他内容与sqoop导数入hive配置一样)

 

            job

            --exec

            stujob

            --meta-connect

            jdbc:hsqldb:hsql://BigInsightMaster:16000/sqoop

       

6)执行oozie的workflow

export OOZIE_URL="http://192.168.1.27:8280/oozie"

oozie job -config examples/apps/sqoop/job.properties -run






  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [oozie 循环 调度] 推荐:

oozie定时循环调度sqoop job 增量导数入hive

- - angela的博客
假设oracle里面有一个student表每10分钟有一批新增的数据,现在想要把数据同步到hive,实现思路是用oozie的coordinator定义一个job,job里面调度workflow用sqoop从oracle里增量导数入hive. 一、oozie调度sqoop直接导数入hive --全量.

#数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

- - ITeye博客
郑昀 创建于2014/10/30 最后更新于2014/10/31. 一)选型:Shib+Presto. 应用场景:即席查询(Ad-hoc Query). 使用者是产品/运营/销售运营的数据分析师;. 要求数据分析师掌握查询SQL查询脚本编写技巧,掌握不同业务的数据存储在不同的数据集市里;. 不管他们的计算任务是提交给 数据库 还是 Hadoop,计算时间都可能会很长,不可能在线等待;.

OOzie简介

- - CSDN博客云计算推荐文章
     用几句话就可以概括什么是Oozie:. Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统. Oozie的工作流是一系列动作的直接周期图. Oozie协调作业就是通过时间(频率)和有效数据触发当前的Oozie工作流程. Oozie是Yahoo针对Apache Hadoop开发的一个开源工作流引擎.

[原]Oozie工作流属性配置的方式与策略

- - Laurence的技术博客
Oozie工作流属性配置的三种方式. Oozie有三种方法可以给工作流提供属性属性配置:. App部署文件夹根目录下的:config-default.xml. 作业属性文件:job.properties. 在命令行中指定属性:-Dkey=value. Oozie工作流属性配置的策略(最佳实践). 坦率地讲,三种配置相互重叠,全部使用会使属性的配置过于分散,使得查找和定位属性变得繁琐.

【vim】疯狂的循环替换

- 本 - 博客园-首页原创精华区
"根据当前文件的扩展名.{cpp,h}来打开相应的.{h,cpp}文件. 相对应的.{h,cpp}文件对,在同一个窗口中打开,否则在不同的Tab中打开. $ vim -p '+tabdo call XX("vsp")' *.h作者: K# 发表于 2011-06-05 00:58 原文链接. 评论: 2 查看评论 发表评论.

js 中for循环和indexOf()性能对比

- Xin - 博客园-首页原创精华区
在js中提供了indexOf()函数以获取某个字符在字符串中的index,可以通过它也判断某个字符或字符串是否存在. 但同时在js中for循环也可以实现同样的效果(判断字符是否存在). var specialWord = new Array("'", "\\", "<", ">", "%", "?", "/", "+", "@", "&", "#", "$", "……", "^", "~", "!", "‘", "’", ".

让你忍不住循环播放的歌曲

- kingpoe - 虾米音乐每日精选
有多少好歌一放就能把你深深吸引住 又有多少首好歌能够让你忍不住再次按下播放键······. 『Jack Johnson一个成长在夏威夷海边的职业冲浪选手,在他厌倦了滑板的生活之后,跑去当导演拍摄了一部嘻哈歌手的纪录影片. 后来又和民谣歌手合作,走入了唱片界. 他不仅一手包办整张专辑的词曲、还会弹...』.

那些让我单曲循环的女声(链接已更新)

- tangfl - 有意思吧
在有意思吧的第二个帖子,竟然是时隔半年多了. 很久没来有意思吧了,现在突然又想写了. 楼主文笔不太好,写不出什么美的形容词来形容歌曲,楼主也不介绍歌曲背景歌手背景之类的了,大家请见谅哈. 废话就不多说,喜欢的话就留个脚印. 像我朋友说的,单曲循环是一种病. (PS:歌曲链接还是可以的,缓冲一下再听完全没问题.

可循环充电的太阳能充电器

- 琢之 - PPLock - 锁定视觉
由新加坡设计师Donn koh设计的太阳能充电器(Renew Solar Battery Charger),可以让电池循环充电,曾获得2009年第九届光宝创新金奖. 这是一款概念设计,专门为AA充电电池设计,该充电器既可吸附在玻璃窗上,也可采用支架的方式置于窗边,相当方便,而且一次可以同时放入多枚电池,充电完成后从底部取出来,如此循环.

Redis的事件循环与定时器模型

- ndv - basic coder
当然,这里要写的不是关于Redis的进程模型,而是Redis的事件模型和定时器模型. 在main()函数的最后调用了aeMain()这个函数进入Redis的事件循环,这个函数的很简单,循环调用aeProcessEvents()来对事件进行处理:. 在此之前Redis做了很多初始化的工作,这些工作大多是在initServer()这个函数中执行的,初始化一些相关的list,dict等,调用aeCreateEventLoop()初始化eventloop,这个函数初始化eventloop相关的数据结构,并最终调用了epoll_create()函数,对epoll上下文进行初始化.