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

假设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:

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

       

       

            ${workflowAppUri}

           

               

                    jobTracker

                    ${jobTracker}

               

               

                    nameNode

                    ${nameNode}

               

               

                    queueName

                    ${queueName}

               

           

       

   

一、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

oozie定时循环调度sqoop job 增量导数入hive_第1张图片




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 job 增量导数入hive_第2张图片

注意参数--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 job 增量导数入hive_第3张图片

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,循环,调度)