Oozie分散式任務的工作流——Sqoop篇

来源:http://www.cnblogs.com/xing901022/archive/2016/11/22/6091306.html
-Advertisement-
Play Games

Sqoop的使用應該是Oozie裡面最常用的了,因為很多BI數據分析都是基於業務資料庫來做的,因此需要把mysql或者oracle的數據導入到hdfs中再利用mapreduce或者spark進行ETL,生成報表信息。 因此本篇的Sqoop Action其實就是運行一個sqoop的任務而已。 同樣ac ...


Sqoop的使用應該是Oozie裡面最常用的了,因為很多BI數據分析都是基於業務資料庫來做的,因此需要把mysql或者oracle的數據導入到hdfs中再利用mapreduce或者spark進行ETL,生成報表信息。

因此本篇的Sqoop Action其實就是運行一個sqoop的任務而已。

同樣action會等到sqoop執行成功後,才會執行下一個action。為了運行sqoop action,需要提供job-tracker,name-node,command或者arg元素。

sqoop action也可以在開啟任務前去創建或者刪除hdfs中的目錄。

sqoop action的配置可以通過job-xml指定文件進行配置,也可以直接在configuration元素中配置。

語法規則

<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.1">
    ...
    <action name="[NODE-NAME]">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>[JOB-TRACKER]</job-tracker>
            <name-node>[NAME-NODE]</name-node>
            <prepare>
               <delete path="[PATH]"/>
               ...
               <mkdir path="[PATH]"/>
               ...
            </prepare>
            <configuration>
                <property>
                    <name>[PROPERTY-NAME]</name>
                    <value>[PROPERTY-VALUE]</value>
                </property>
                ...
            </configuration>
            <command>[SQOOP-COMMAND]</command>
            <arg>[SQOOP-ARGUMENT]</arg>
            ...
            <file>[FILE-PATH]</file>
            ...
            <archive>[FILE-PATH]</archive>
            ...
        </sqoop>
        <ok to="[NODE-NAME]"/>
        <error to="[NODE-NAME]"/>
    </action>
    ...
</workflow-app>
  • prepare元素,用於創建或者刪除指定的hdfs目錄。
  • job-xml可以指定sqoop action的參數配置
  • confuguration用於配置sqoop任務

sqoop command

sqoop命令可以通過command和arg標簽組成。

當使用command元素時,oozie將會按照空格切分命令,作為參數。因此當你使用query的時候,就不能用command了!

當使用arg的時候,每個arg都是一個參數。

所有的參數部分,都可以使用EL表達式。

例子

基於command的例子

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
    ...
    <action name="myfirsthivejob">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>foo:8021</job-tracker>
            <name-node>bar:8020</name-node>
            <prepare>
                <delete path="${jobOutput}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.compress.map.output</name>
                    <value>true</value>
                </property>
            </configuration>
            <command>import  --connect jdbc:hsqldb:file:db.hsqldb --table TT --target-dir hdfs://localhost:8020/user/tucu/foo -m 1</command>
        </sqoop>
        <ok to="myotherjob"/>
        <error to="errorcleanup"/>
    </action>
    ...
</workflow-app>

基於arg元素的例子

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
    ...
    <action name="myfirsthivejob">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>foo:8021</job-tracker>
            <name-node>bar:8020</name-node>
            <prepare>
                <delete path="${jobOutput}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.compress.map.output</name>
                    <value>true</value>
                </property>
            </configuration>
            <arg>import</arg>
            <arg>--connect</arg>
            <arg>jdbc:hsqldb:file:db.hsqldb</arg>
            <arg>--table</arg>
            <arg>TT</arg>
            <arg>--target-dir</arg>
            <arg>hdfs://localhost:8020/user/tucu/foo</arg>
            <arg>-m</arg>
            <arg>1</arg>
        </sqoop>
        <ok to="myotherjob"/>
        <error to="errorcleanup"/>
    </action>
    ...
</workflow-app>

遇到的問題

經常會遇到這種問題:直接使用sqoop可以執行,但是在oozie中就無法執行了。這個時候可以按照下麵的思路進行排查:

  • 1 oozie中的lib是否與sqoop相同。對比sqoop/lib以及oozie/lib/xxx/sqoop就可以了
  • 2 oozie中如果是以arg這種方式啟動。那麼問題很有可能出在query的別名以及split-by參數上.... 因為在sqoop中可以自動推斷,但是在oozie中就無法知道欄位所屬的表了。

舉個例子

sqoop --import .... --query "select a.*,b.* from t1 a left join t2 b on a.id=b.id..." --split-by id ...

這個時候oozie裡面,無法知道id到底是哪個表的。需要指定它的別名才可以

...
<arg>--split-by</arg>
<arg>a.id</arg>
...

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在昨天,11.22 我完成了這次課設的報告,開心! 這次的課設真是個磨人的小妖精!!! 題目也不是很難,資料庫+視窗顯示 火車票售票系統(用戶+管理員 訂票/退票 增刪改信息等操作) 最後我決定用 sqlserver+eclipse 完成。 最初,我是用mysql,但是!最後想想可能是因為我的安裝包 ...
  • 1.列級約束語法 create table primary_test ( -- 建立主鍵約束 test_id int primary key, test_name varchar(20), test_pass varchar(20) ); 2.表級約束語法 create table primary_ ...
  • 修改欄位預設值-查找欄位的約束名稱 刪除約束 修改預設值約束 獲取表列的預設值 ...
  • 1.打開資料庫:找到表,雙擊要插入的表打開: 2.打開之後點擊文件->查詢表 3.輸入要查詢的語句,點擊運行。成功後會有提示。 ...
  • oracle: 一、數據 db數據欄位如下: task_id task_name t.parent_task_id *** *** *** *** *** 000001 t1 *** *** 000002 t11 000001 *** 000005 t12 000001 *** 000003 t11 ...
  • 這是最基礎的用法: LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX) 例: select listagg(oeid,',') within GROUP (order by oeid) ...
  • Master/Slave主從複製 主從複製MongoDB中比較常用的一種方式,如果要實現主從複製至少應該有兩個MongoDB實例,一個作為主節點負責客戶端請求,另一個作為從節點負責從主節點映射數據,提供數據備份,客戶端讀取等,推薦一主多從模式 MongoDB主從複製的實現方式: 主節點的操作會被記錄... ...
  • 11g新特性:Health Monitor Checks 一、什麼是Health Monitor Checks Health Monitor Checks能夠發現文件損壞,物理、邏輯塊損壞,undo、redo損壞,數據字典損壞等等。 Health Monitor Checks產生結果報告,它包含瞭解 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...