Oozie 快速入門


設想一下,當你的系統引入了spark或者hadoop以后,基於Spark和Hadoop已經做了一些任務,比如一連串的Map Reduce任務,但是他們之間彼此右前后依賴的順序,因此你必須要等一個任務執行成功后,再手動執行第二個任務。是不是很煩! 這個時候Oozie(馴象人,典故來自評論一樓)就派上用場了,它可以把多個任務組成一個工作流,自動完成任務的調用。

簡介

Oozie是一個基於工作流引擎的服務器,可以在上面運行Hadoop的Map Reduce和Pig任務。它其實就是一個運行在Java Servlet容器(比如Tomcat)中的Javas Web應用。

對於Oozie來說,工作流就是一系列的操作(比如Hadoop的MR,以及Pig的任務),這些操作通過有向無環圖的機制控制。這種控制依賴是說,一個操作的輸入依賴於前一個任務的輸出,只有前一個操作完全完成后,才能開始第二個。

Oozie工作流通過hPDL定義(hPDL是一種XML的流程定義語言)。工作流操作通過遠程系統啟動任務。當任務完成后,遠程系統會進行回調來通知任務已經結束,然后再開始下一個操作。

Oozie工作流包含控制流節點以及操作節點

控制流節點定義了工作流的開始和結束(start,end以及fail的節點),並控制工作流執行路徑(decision,fork,join節點)。操作節點是工作流觸發計算\處理任務的執行,Oozie支持不同的任務類型——hadoop map reduce任務,hdfs,Pig,SSH,eMail,Oozie子工作流等等。Oozie可以自定義擴展任務類型。

Oozie工作流可以參數化的方式執行(使用變量${inputDir}定義)。當提交工作流任務的時候就需要同時提供參數。如果參數合適的話(使用不同的目錄)就可以定義並行的工作流任務。

總結來說

  • Oozie是管理Hadoop作業的工作流調度系統
  • Oozie的工作流是一系列的操作圖
  • Oozie協調作業是通過時間(頻率)以及有效數據觸發當前的Oozie工作流程
  • Oozie是針對Hadoop開發的開源工作流引擎,專門針對大規模復雜工作流程和數據管道設計
  • Oozie圍繞兩個核心:工作流和協調器,前者定義任務的拓撲和執行邏輯,后者負責工作流的依賴和觸發。

WordCount工作流例子

流程圖

hPDL流程的定義:

<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.1">
    <start to='wordcount'/>
    <action name='wordcount'>
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.myorg.WordCount.Map</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.myorg.WordCount.Reduce</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${inputDir}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to='end'/>
        <error to='end'/>
    </action>
    <kill name='kill'>
        <message>Something went wrong: ${wf:errorCode('wordcount')}</message>
    </kill/>
    <end name='end'/>
</workflow-app>

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM