加载中…
正文 字体大小:

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

(2013-07-28 15:28:50)
标签:

oozie

sqoop

job

假设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调度shellsqoop 一样用一个mapreduce程序调度hadoop集群随机选择一个nodenamenode或者datanode运行shell或者sqoop job所以sqoop-site.xml应该在所有的node上是一样的配置需要在所有node上的sqoop-site.xml中设置sqoop.metastore.client.record.passwordtrue若只在namenode上设置oozie调度sqoopjob的时候还是会报错

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

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

因为是随机选一个node执行sqoop jobsqoop job的元数据信息是存储在hsqldb关系型数据库中的sqoopmetastore默认是存储在$HOME/.sqoop/下的是存储在本地的如果只在namenode上建jobooziesqoop 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

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

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


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

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

注意参数--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

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

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

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

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

4)在hive中预先建student表

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

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定时循环调度sqoop <wbr>job <wbr>增量导数入hive

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

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
  • 评论加载中,请稍候...
发评论

       

    验证码: 请点击后输入验证码 收听验证码

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有