轉(zhuǎn)帖|其它|編輯:郝浩|2011-08-24 14:23:05.000|閱讀 592 次
概述:在Hadoop中執(zhí)行的任務(wù)有時候需要把多個Map/Reduce作業(yè)連接到一起,這樣才能夠達(dá)到目的。[1]在Hadoop生態(tài)圈中,有一種相對比較新的組件叫做Oozie[2],它讓我們可以把多個Map/Reduce作業(yè)組合到一個邏輯工作單元中,從而完成更大型的任務(wù)。本文中,我們會向你介紹 Oozie以及使用它的一些方式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在Hadoop中執(zhí)行的任務(wù)有時候需要把多個Map/Reduce作業(yè)連接到一起,這樣才能夠達(dá)到目的。[1]在Hadoop生態(tài)圈中,有一種相對比較新的組件叫做Oozie[2],它讓我們可以把多個Map/Reduce作業(yè)組合到一個邏輯工作單元中,從而完成更大型的任務(wù)。本文中,我們會向你介紹Oozie以及使用它的一些方式。
什么是Oozie?
Oozie是一種Java Web應(yīng)用程序,它運(yùn)行在Java servlet容器——即Tomcat——中,并使用數(shù)據(jù)庫來存儲以下內(nèi)容:
●工作流定義
●當(dāng)前運(yùn)行的工作流實(shí)例,包括實(shí)例的狀態(tài)和變量
Oozie工作流是放置在控制依賴DAG(有向無環(huán)圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業(yè)、Pig作業(yè)等),其中指定了動作執(zhí)行的順序。我們會使用hPDL(一種XML流程定義語言)來描述這個圖。
hPDL是一種很簡潔的語言,只會使用少數(shù)流程控制和動作節(jié)點(diǎn)。控制節(jié)點(diǎn)會定義執(zhí)行的流程,并包含工作流的起點(diǎn)和終點(diǎn)(start、end和fail節(jié)點(diǎn))以及控制工作流執(zhí)行路徑的機(jī)制(decision、fork和join節(jié)點(diǎn))。動作節(jié)點(diǎn)是一些機(jī)制,通過它們工作流會觸發(fā)執(zhí)行計算或者處理任務(wù)。Oozie為以下類型的動作提供支持: Hadoop map-reduce、Hadoop文件系統(tǒng)、Pig、Java和Oozie的子工作流(SSH動作已經(jīng)從Oozie schema 0.2之后的版本中移除了)。
所有由動作節(jié)點(diǎn)觸發(fā)的計算和處理任務(wù)都不在Oozie之中——它們是由Hadoop的Map/Reduce框架執(zhí)行的。這種方法讓Oozie可以支持現(xiàn)存的Hadoop用于負(fù)載平衡、災(zāi)難恢復(fù)的機(jī)制。這些任務(wù)主要是異步執(zhí)行的(只有文件系統(tǒng)動作例外,它是同步處理的)。這意味著對于大多數(shù)工作流動作觸發(fā)的計算或處理任務(wù)的類型來說,在工作流操作轉(zhuǎn)換到工作流的下一個節(jié)點(diǎn)之前都需要等待,直到計算或處理任務(wù)結(jié)束了之后才能夠繼續(xù)。Oozie可以通過兩種不同的方式來檢測計算或處理任務(wù)是否完成,也就是回調(diào)和輪詢。當(dāng)Oozie啟動了計算或處理任務(wù)的時候,它會為任務(wù)提供唯一的回調(diào)URL,然后任務(wù)會在完成的時候發(fā)送通知給特定的URL。在任務(wù)無法觸發(fā)回調(diào)URL的情況下(可能是因?yàn)槿魏卧颍确秸f網(wǎng)絡(luò)閃斷),或者當(dāng)任務(wù)的類型無法在完成時觸發(fā)回調(diào)URL的時候,Oozie有一種機(jī)制,可以對計算或處理任務(wù)進(jìn)行輪詢,從而保證能夠完成任務(wù)。
Oozie工作流可以參數(shù)化(在工作流定義中使用像${inputDir}之類的變量)。在提交工作流操作的時候,我們必須提供參數(shù)值。如果經(jīng)過合適地參數(shù)化(比方說,使用不同的輸出目錄),那么多個同樣的工作流操作可以并發(fā)。
一些工作流是根據(jù)需要觸發(fā)的,但是大多數(shù)情況下,我們有必要基于一定的時間段和(或)數(shù)據(jù)可用性和(或)外部事件來運(yùn)行它們。Oozie協(xié)調(diào)系統(tǒng)(Coordinator system)讓用戶可以基于這些參數(shù)來定義工作流執(zhí)行計劃。Oozie協(xié)調(diào)程序讓我們可以以謂詞的方式對工作流執(zhí)行觸發(fā)器進(jìn)行建模,那可以指向數(shù)據(jù)、事件和(或)外部事件。工作流作業(yè)會在謂詞得到滿足的時候啟動。
經(jīng)常我們還需要連接定時運(yùn)行、但時間間隔不同的工作流操作。多個隨后運(yùn)行的工作流的輸出會成為下一個工作流的輸入。把這些工作流連接在一起,會讓系統(tǒng)把它作為數(shù)據(jù)應(yīng)用的管道來引用。Oozie協(xié)調(diào)程序支持創(chuàng)建這樣的數(shù)據(jù)應(yīng)用管道。
安裝Oozie
我們可以把Oozie安裝在現(xiàn)存的Hadoop系統(tǒng)中,安裝方式包括tarball、RPM和Debian包等。我們的Hadoop部署是Cloudera的CDH3,其中已經(jīng)包含了Oozie。因此,我們只是使用yum把它拉下來,然后在edge節(jié)點(diǎn)[1]上執(zhí)行安裝操作。在Oozie的發(fā)布包中有兩個組件——Oozie-client和Oozie-server。根據(jù)簇集的規(guī)模,你可以讓這兩個組件安裝在同一臺edge服務(wù)器上,也可能安裝在不同的計算機(jī)上。Oozie服務(wù)器中包含了用于觸發(fā)和控制作業(yè)的組件,而客戶端中包含了讓用戶可以觸發(fā)Oozie操作并與Oozie服務(wù)器通信的組件。
想要了解更多關(guān)于安裝過程的信息,請使用Cloudera發(fā)布包,并訪問Cloudera站點(diǎn)[2]。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載