Oozie:Hadoop工作調度工具

jopen 10年前發布 | 22K 次閱讀 Hadoop 分布式/云計算/大數據

在Hadoop中執行的任務有時候需要把多個Map/Reduce作業連接到一起,這樣才能夠達到目的。在Hadoop生態圈中,有一個相對比較新的組件叫做Oozie,它讓我們可以把多個Map/Reduce作業組合到一個邏輯工作單元中,從而完成更大型的任務。

Oozie:Hadoop工作調度工具

Oozie是服務于hadoop生態系統的工作流調度工具,job運行平臺是區別于其他調度工具的最大的不同。但其實現的思路跟一般調度工具幾乎完全相同。

  1. 作為調度系統兩大核心:依賴和觸發。依賴可以是條件依賴,比如,資源依賴,依賴于某些數據文件的存在,也可以是任務依賴,比如依賴于另一個job 的完成。在oozie里,每一個job對應一個action節點,這個節點可以是java,hadoop FS,mapred,hive,sqoop,OS shell等等。job之間的依賴通過動作節點完成,fork,join等。觸發主要指時間觸發。依賴和觸發在動作的方向上是相互的,依賴是必要條件,而 觸發是充分條件。
  2. 調度系統本身不會去執行具體的job,而是將job相關的所有資源發送到真實的執行環境,比如hadoop jobtractor,hive client,關系型數據庫系統等等,自己僅僅記錄并監視job的執行狀態,并對其狀態的變化作出相應的動作,比如,job失敗可以重新運行,job成功 轉到下一個節點。發送job的過程是一個非阻塞的行為,個別例外(比如hadoop fs操作)。
  3. 調度系統本身可以是任意程序,例如,linux上的一個腳本程序發起的精靈進程,一個web 工程,也可以是個GUI的軟件工具。
  4. </ol>

    Oozie作為一個調度引擎,是不同于hadoop的jobtracker實現的調度器的,雖然兩者均為“Schedule”之意。Oozie負責 任務的調度分發,是指從提交作業的本地,將資源發送到job運行環境,比如hadoop集群。這個“分發”行為發生在hadoop集群外。而 jobtracker是將hadoop作業拆分成若干個mapreduce job,分派給tasktracker去執行。這個“分發”行為發生在hadoop集群內,是應用程序本身的功能,它可以自己選擇job執行的先后順序, 或者停止一個正在執行的job,讓出資源給另一個job,控制的更為精細。跟傳統意義上的調度工具含義不同。

    Oozie工作流

    • Oozie工作流通過HPDL(一種通過XML自定義處理的語言,類似JBOSS JBPM的JPDL)來構造。
    • Oozie工作流中的Action在運程系統運行如(Hadoop,Pig服務器上).一旦Action完成,遠程服務器將回調Oozie的接口 并通知Action已經完成,這時Oozie又會以同樣的方式執行工作流中的下一個Action,直到工作流中所有Action都完成(完成包括失敗)。
    • Oozie工作流中包含可控制的工作流節點(control flow node)和Action節點(action node)。
    • Control flow node其實可以理解為Oozie的語法,比如可以定義開始(start),結束(end),失敗(fail)節點.開始節點就表示從該節點開始運行.同 時也提供一種機制去控制工作流的執行過程,如選擇(decision),并行(fork),join節點。
    • Oozie工作流提供各種類型的Action用于支持不同的需要,如Hadoop Map/Reduce,Hadoop File System,Pig,SSH,HTTP,Email,Java,以及Oozie子流程.Oozie也支持自定義擴展以上各種類型的Action。
    • Oozie工作流允許自定義參數,如${inputDir}。
    • 例如wordcount的例子:啟動后執行”mapreduce wordcount”,如果成功執行end,如果失敗執行kill。配置打包后通過OozieClient提交給Hadoop就直接可以運行了
    • </ul>

      Oozie任務分為三種模式:

      • workflow – 這種方式最簡單,就是定義DAG來執行。
      • coordinator – 它構建在workflow工作方式之上,提供定時運行和觸發運行任務的功能。
      • bundle – bundle的作用就是將多個coordinator管理起來。這樣我們只需要提供一個bundle提交即可。然后可以start/stop/suspend/resume任何coordinator。
      • </ul>

        如果想通過Oozie調度遠程服務器上的命令,可以通過ssh action來執行任意的shell命令。用戶必須明確的上傳所需要的第三方庫。Oozie通過Hadoop的分布式緩沖來上傳、打標簽、使用。 Shell命令會在任意一個hadoop計算節點上運行,但是計算節點上默認安裝的工具集可能會不一樣。不過在所有的計算節點上,通常都裝有大部分普通的 unix工具。因此需要明確的很重要的一點是:Oozie只支持有被安裝到計算節點上的命令或者通過分布式緩存上傳的命令。也就是說,我們必須通過 file上傳我們要用到的文件。

        參考資料:

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!