1. 程式人生 > >CDH中oozie 定時排程sqoop job

CDH中oozie 定時排程sqoop job

在資料開發中,由於資料量非常的大,有時候需要將關係型資料庫(Oracle/Postgresql/Mysql等)中的表匯入到hdfs中進行分散式儲存。本文就oozie定時呼叫sqoop job從oracle庫中增量匯入資料至hive表具體操作記錄一下:

首先,準備工作是在HDFS上建立oozie job需要的workflow.xml,hive-site.xml,coordinator.xml和lib資料夾,比如我的是在/user/oozie/workflow/sqoop2hive下面建立的

Lib檔案下,存放的是我們的連線關係型資料庫的驅動:mysql-connector-java.jar,ojdbc6.jar

workflow.xml是配置的工作流,如下:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="sqoop-to-hive">
    <start to="sqoop2hive"/>
    <action name="sqoop2hive">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>sqoop.metastore.client.record.password</name>
                    <value>true</value>
                </property>

                <property>
                    <name>hive.metastore.local</name>
                    <value>true</value>
                </property>
                <property>
                  <name>hive.metastore.uris</name>
                  <value>thrift://cloud171:9083
</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:oracle://188.188.2.175:1521/orcl?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> </configuration> <command>job --meta-connect jdbc:hsqldb:hsql://cloud171
:16000/sqoop --exec sqoop2hive_job</command> </sqoop> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end"/> </workflow-app>
把hive-site.xml也放進來即可,這裡不再細說

下面是把定時排程的coordinator.xml檔案配置如下:這裡是配置10分鐘呼叫一次sqoop job

<coordinator-app name="sqoop2hive-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>
            </configuration>
        </workflow>
    </action>
</coordinator-app>
下面是job.properties,具體配置如下:這個job.properties是放在本地的,不是hdfs上
nameNode=hdfs://cloud171:8020
jobTracker=cloud171:8032
oozie.libpath=${nameNode}/user/oozie/share/lib/lib_20170401085707/sqoop  #根據你的環境對應修改
oozie.use.system.libpath=true
start=2017-10-10T07:30Z
end=2017-11-06T08:00Z
oozie.coord.application.path=${nameNode}/user/oozie/workflow/sqoop2hive  #放上面三個檔案的路徑
workflowAppUri=${nameNode}/user/oozie/workflow/sqoop2hive   #同上

注意1:其次需要啟動sqoop metastore,否則會報錯:ERROR tool.JobTool: I/O error performing job operation: java.io.IOException: Exception creating SQL connection

sqoop metastore

注意2:關於sqoop job執行的時候,需要輸入資料庫的密碼,需要在sqoop-site.xml中設定sqoop.metastore.client.record.password為true,取消註釋即可

下面再說一下sqoop job 的命令:

sqoop job \
--meta-connect jdbc:hsqldb:hsql://cloud171:16000/sqoop \  #sqoop 工作流和job是配置在HSQL裡的,預設埠是16000
--create sqoop2hive_job \
--(空格)import --connect jdbc:oracle:thin:@188.188.2.175:1521:orcl \
--username scott \
--password tiger  -m 1 \
--table EMP \
--hive-import --hive-table cust \
--incremental append --check-column EMPNO --last-value 0
上面的是一個數據庫增量更新,建立sqoop job :sqoop2hive_job
sqoop job的刪除:

sqoop job --meta-connect jdbc:hsqldb:hsql://cloud171:16000/sqoop --delete job名稱

下面呢就是呼叫oozie了:

oozie job -oozie http://cloud171:11000/oozie -config /opt/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/sqoop/job.properties(本地job.properties的路徑) -run

接下來會產生一個編號,在oozie的web UI裡面可以看到。這裡是直接的操作流程,有些粗糙,下面再補充一下sqoop job的部分

=========================================================================

sqoop支援兩種增量匯入模式,
 一種是 append,即通過指定一個遞增的列,比如:
--incremental append  --check-column num_iid --last-value 0

varchar型別的check欄位也可以通過這種方式增量匯入(ID為varchar型別的遞增數字):

--incremental append  --check-column ID --last-value 8
另種是可以根據時間戳,比如:
--incremental lastmodified --check-column created --last-value '2012-02-01 11:0:00'
就是隻匯入created 比'2012-02-01 11:0:00'更大的資料。


相關推薦

CDHoozie 定時排程sqoop job

在資料開發中,由於資料量非常的大,有時候需要將關係型資料庫(Oracle/Postgresql/Mysql等)中的表匯入到hdfs中進行分散式儲存。本文就oozie定時呼叫sqoop job從oracle庫中增量匯入資料至hive表具體操作記錄一下: 首先,準備工作是在HD

oozie 定時排程時區設定

oozie是hadoop的工作流,能夠排程hadoop的相關任務,在這裡說一下oozie的時區問題。 時區概念 大家應該知道,地球上按照經緯度將地球劃分為二十四個時區(東、西各12個時區),每兩個相鄰的時區間時間上相差1小時。 標準時間概念 UTC是世界標準時間,

oozie定時排程的配置說明第一篇

如果需要做一個迴圈的定時排程,基本的需要三個檔案 job.properties 記錄了job的屬性workflow.xml 使用hPDL 定義任務的流程和分支coordinator.xml 主要用來做workflow的觸發條件,來做定時觸發,也可以組合多個workflow

Oracle定時執行任務job

眾所周知,一般作業系統會提供定時執行任務的方法,例如:Unix平臺上提供了 讓系統定時執行任務的命令Crontab。但是,對於某些需求,例如:一些對資料庫表的操作,最為典型的是證券交易所每日收盤後的結算,它涉及大量的資料 庫表操作,如果仍然利用作業系統去定時執行,不僅需要大量的程式設計工作,而且還會出現使用

Oracle PLSQLl的多執行緒程式設計架構 儲存過程使用多執行緒 定時任務 作業排程計劃 JOB SCHEDULE

  基於Oracle plsql的多執行緒程式設計架構 (附儲存過程) 1年前 1413 作者介紹 馮守東,北京科訊華通科技發展有限公司高階專案經理。超12年Oracle開發及管理經驗,多年運營商和政府企業級系統運維經驗,曾獲得東軟最佳設計方案獎。熟悉Weblogic、TU

oozie排程sqoop

建立目錄sqoop,以下所有目錄和檔案都放在sqoop目錄下。 1.建立目錄lib,拷貝msql的jar包到該目錄 mysql-connector-java.jar 2.job.properties檔案 內容如下: nameNode=hdfs://ip-150:80

ssm配置Quartz定時排程任務

1.首先在你web專案中pom.xml配置相關依賴jar包,非maven專案自行新增對應版本的jar檔案 pom.xml: <!-- quartz定時器相關依賴jar版本 --> <dependency> <groupId>or

【解決】Oozie排程Hive程式時,出現Job狀態一直是ACCEPTED!

Oozie在排程Hive程式時,出現Job狀態一直是ACCEPTED!網上查閱資料說是記憶體不足問題,我改了yarn-site.xml配置檔案 : <property> <name>mapreduce.map.memory.mb</name>

分散式定時任務Elastic-Job框架在SpringBoot工程的應用實踐(二)

文章摘要:在生產環境中部署Elastic-Job集群后,那麼如何來運維監控線上跑著的定時任務呢? 如果在生產環境的大規模伺服器叢集上部署了整合Elastic-Job的業務工程,而沒有相應的運維監控工具可以來監控定時任務執行狀態和動態修改定時任務執行時間,修改相應的配置還得手動

Spring使用Quartz定時排程Job無法Autowired注入Service的解決方案

        專案過程中有這樣一個場景:呼叫微信開放平臺介面獲取access_token,每2小時access_token失效一次,每天限額2000次,因此在專案中做了如下處理:        1)啟動服務時,呼叫外部介面獲取access_token入庫;        

spring boot 配置定時任務job

我的文章中有關於spring mvc中 定時任務的配置:https://blog.csdn.net/T2080305/article/details/81626088。這裡有詳細講解如何配置,那麼spring boot中如何配置呢,spring boot講究無xml配置,也就

oozie排程sqoop踩坑之路(hue配置)

背景: 通過oozie來排程管理sqoop資料抽取流程,一般有兩種方法:一是直接使用oozie的sqoop-action,二是將sqoop語句寫在shell指令碼中,通過shell-action來排程。經過測試,sqoop-action實在是坑多,故採用坑相對

Oracle定時排程(schedule和job結合)

--建立定時排程 begin sys.dbms_scheduler.create_schedule( repeat_interval => 'FREQ=DAILY;BYHOUR=02;BYMINUTE=0;BYSECOND=0', --start_date

Spring Boot 配置定時任務,實現多線程操作

pre log pri http code china 部分 多線程操作 .net 參考的代碼部分 https://git.oschina.net/jokerForTao/spring_boot_schedule 一目了然!Spring Boot 中配置定時任務,實現

Linux定時和延時任務

linux如何讓系統定時的完成任務,如何讓系統再過一段時間自主的完成某項任務,如下將對系統定時和延時做詳細介紹。####一、at命令####at命令基本用法at -l ##列出延遲任務at -r 任務id ##刪除此id任務at -m ##讓無輸出的命令不產生

Springboot定時任務 和 Springboot API 分頁

blog get net http www. htm 分頁 detail art 定時任務 Springboot API 分頁Springboot中做定時任務 和 Springboot API 分頁

node定時任務

div require cer req keyword ber gpo rec new node-schedule每次都是通過新建一個scheduleJob對象來執行具體方法。 時間數值按下表表示 * * * * * * ┬ ┬

Oracle定時任務

variable 查看 需要 insert 清明節 ati pan cti roc 1、創建創建存儲過程 1 create or replace procedure pro_test_job1 is 2 begin 3 insert into vacation

ubuntu執行定時任務crontab

img bsp etc 可能 exp reload 檔案 多個 命令行 今天研究了下ubuntu裏的crontab內置指令。這是設置定時執行腳本任務的指令,我先測試了下最基礎的執行。 第一次使用crontab 時,會出現 no crontab for root - usin

thinkjs2.2定時任務

nod 定時任務 表達式 指定 sch ron col 參數 技術 暫且先討論定時任務的其中兩種實現方法: 1.setInterval() setInterval()可按照指定的周期(毫秒數計)來調用函數或者計算表達式; setInterval()方法會不停的調用該函