Oozie介紹

首先本人以前還真不知道Oozie這個東東,經別人說才知道,所以感覺也是比較慚愧。畢竟正在做的項目DIP-DATA-ANALYZE與這個有些共同處,就是提供類似工作流的機制更好的調度任務。不過Oozie支持的更多,支持了pig,直接mr,streaming。我們目前是基於hive的,當然也可以支持streaming,mr,不過目前還沒有。

        另外一個不同是Oozie使用自定義的xml語言hPDL來定義工作流。工作如何進行全部在配置文件中定義。而DIP-DATA-ANALYZE完全界面化,通過選擇原任務來指定這個依賴關係。易用性方面個人覺得我們的使用起來更加方便些。當然一些工作流設計實現上Oozie更加完善。

   閒言少說,還是進入主題,介紹下Oozie。

   

什麼是Oozie?

Oozie是一種Java Web應用程序,它運行在Java servlet容器——即Tomcat——中,並使用數據庫來存儲以下內容:

  • 工作流定義
  • 當前運行的工作流實例,包括實例的狀態和變量

Oozie工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業、Pig作業等),其中指定了動作執行的順序。我們會使用hPDL(一種XML流程定義語言)來描述這個圖。

hPDL是一種很簡潔的語言,只會使用少數流程控制和動作節點。控制節點會定義執行的流程,幷包含工作流的起點和終點(start、end和fail節點)以及控制工作流執行路徑的機制(decision、fork和join節點)。動作節點是一些機制,通過它們工作流會觸發執行計算或者處理任務。Oozie爲以下類型的動作提供支持: Hadoop map-reduce、Hadoop文件系統、Pig、Java和Oozie的子工作流(SSH動作已經從Oozie schema 0.2之後的版本中移除了)。

所有由動作節點觸發的計算和處理任務都不在Oozie之中——它們是由Hadoop的Map/Reduce框架執行的。這種方法讓Oozie可以支持現存的Hadoop用於負載平衡、災難恢復的機制。這些任務主要是異步執行的(只有文件系統動作例外,它是同步處理的)。這意味着對於大多數工作流動作觸發的計算或處理任務的類型來說,在工作流操作轉換到工作流的下一個節點之前都需要等待,直到計算或處理任務結束了之後才能夠繼續。Oozie可以通過兩種不同的方式來檢測計算或處理任務是否完成,也就是回調和輪詢。當Oozie啓動了計算或處理任務的時候,它會爲任務提供唯一的回調URL,然後任務會在完成的時候發送通知給特定的URL。在任務無法觸發回調URL的情況下(可能是因爲任何原因,比方說網絡閃斷),或者當任務的類型無法在完成時觸發回調URL的時候,Oozie有一種機制,可以對計算或處理任務進行輪詢,從而保證能夠完成任務。

Oozie工作流可以參數化(在工作流定義中使用像${inputDir}之類的變量)。在提交工作流操作的時候,我們必須提供參數值。如果經過合適地參數化(比方說,使用不同的輸出目錄),那麼多個同樣的工作流操作可以併發。

一些工作流是根據需要觸發的,但是大多數情況下,我們有必要基於一定的時間段和(或)數據可用性和(或)外部事件來運行它們。Oozie協調系統(Coordinator system)讓用戶可以基於這些參數來定義工作流執行計劃。Oozie協調程序讓我們可以以謂詞的方式對工作流執行觸發器進行建模,那可以指向數據、事件和(或)外部事件。工作流作業會在謂詞得到滿足的時候啓動。

   經常我們還需要連接定時運行、但時間間隔不同的工作流操作。多個隨後運行的工作流的輸出會成爲下一個工作流的輸入。把這些工作流連接在一起,會讓系統把它作爲數據應用的管道來引用。Oozie協調程序支持創建這樣的數據應用管道。


設計思想

     Oozie workflow

    Oozie workflows are actions arranged in a control dependency DAG (Direct Acyclic Graph).

    An Oozie workflow may contain the following types of actions nodes: map-reduce, map-reduce streaming, map-reduce pipes, pig, file-system, sub-workflows, java, http (no yet implemented), email (not yet implemented) and ssh (deprecated).

    Flow control operations within the workflow can be done using decision, fork and join nodes. Cycles in workflows are not supported.

     工作流控制可以通過decision\fork\join等幾個節點完成。目前不支持環形工作流.


Actions and decisions can be parameterized with job properties, actions output (i.e. Hadoop counters) and HDFS file information (file exists, file size, etc). Formal parameters are expressed in the workflow definition as ${VAR} variables.

動作和決定可以和job的屬性、action的輸出(例如計數等)、hdfs的文件信息(是否存在、大小等)一起參數化。這些參數可以使用${var}定義在工作流配置文件中。

A Workflow application is an HDFS directory that contains the workflow definition (anXML file), all the necessary files to run all the actions: JAR files for Map/Reduce jobs, shells for streaming Map/Reduce jobs, native libraries, Pig scripts, and other resource files.

工作流應用是一個包含了工作流定義(xml文件),所有必須的文件的目錄,並執行所有的動作。這些必須文件包括jar文件(用來執行mr任務)、shell腳本(用來執行streaming mr 任務)、還有其他的比如本地庫、pig腳本以及其他文件。

Running workflow jobs is done via command line tools, a WebServices API or a JavaAPI.

 通過命令行工具或者webservice api或java api即可執行工作流。

Monitoring the system and workflow jobs can be done via a web console, the command line tools, the WebServices API and the Java API.

Oozie is a transactional system and it has built in automatic and manual retry capabilities.

    通過web控制檯、命令行工具、webservice api、java api即可對系統和工作流任務進行監控。Oozie是一個事務系統,其已經內在支持了自動化和手動的重試機制。(這點DIP-DATA-ANALYZE有轉發(自動第二次重試),jobtrace(手動重試)也可以支持).

In case of workflow job failure, the workflow job can be rerun skipping previously completed actions, the workflow application can be patched before being rerun.

     如果任務失敗了,工作流的任務就會略過之前完成的動作重新執行,並且工作流應用在重新運行前可以被修補(這裏patched不確定是否這樣表達).

 目前特性:

  • Workflow dependency management: Oozie runtime manages the dependencies and execute actions when all the dependencies are satisfied. Workflows depend on time and/or data arrival. Intra workflow dependency is usually a prior node job completion within the DAG.
  • 工作流依賴管理:Oozie運行環境管理任務依賴,並在所有依賴全部滿足時菜執行動作。工作流取決於時間和/或數據是否存在。基於DAG(有向無環圖)工作流內部依賴通常會優先完成.
  • Parameterization of action nodes: Oozie supports built in JSP expression language (EL) function for users to parameterize their workflow action. E.g. workflow name, action name, nominal start time is now available to actions.
  • 動作節點的參數化:Oozie內嵌默認使用jsp表達式語言對動作進行參數化。這些參數包括工作流名字、動作名稱、開始時間等。
  • Synchronous datasets: Oozie workflows can also depend on synchronous input data set – These are also referred to as “clocked datasets”, or those that are generated with regular periodicity.
  • 同步數據集:工作流可以依賴同步輸入數據集合。這些數據可以是定時數據集或者是週期性產生的數據集.
  • Native support for Streaming, M/R, PIGHDFS jobs on Hadoop: Oozie supports most types of jobs on Hadoop.
  • 本地支持streaming mr、pig、hdfs jobs。支持絕大部分Hadoop集羣的任務類型
  • WebService APIs: Oozie supports both command line and WebService APIs.
  • Webservice API:支持命令行和webservice api
  • GUI Monitoring: Oozie workflows can be monitored via a GUI interface as well as a WebService API.
  • 支持界面化的監控:既可以通過gui界面,也可以通過webservice api監控工作流運行情況
缺失:
目前還不支持hive
不支持hbase

Oozie運行必要條件:
  • Unix
  • Java 1.6+
  • Tomcat 6+
  • MySQL 5+ or HSQLDB 1.8+
  • Hadoop 0.20+
  • Pig 0.2+

參考資料:

  官網:http://yahoo.github.com/oozie/

  apache:http://incubator.apache.org/oozie/

  博客文章:http://blog.sina.com.cn/s/blog_62a9902f01011ccd.html

完結

   



       

發佈了72 篇原創文章 · 獲贊 9 · 訪問量 72萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章