您可以選擇Hadoop解決方案和非Hadoop解決方案。
Hadoop的解決方案
Hadoop的具有用於這種情況下的三個主要框架:
每個框架都有其優點和缺點。例如,Oozie強烈基於XML(許多人不喜歡),您可以編寫可添加到oozie工作流引擎的作業。人們通常喜歡Oozie的是他們有一個GUI來設計工作流程。
有關Hadoop工作流程解決方案的詳細信息,請參閱Google對這些語言的比較。有可用的
非Hadoop的解決方案很多,科指南comparisions
寫在任何語言中您的工作流程的代碼(最有可能的腳本語言如Python,bash或Perl的適合多地進入該用例比一種編譯語言)。將此應用程序添加到cron作業,然後定期運行應用程序。
在應用程序中調用所有命令(如hdfs dfs
或hadoop jar
)。您非常靈活地捕捉異常或準備好所有您需要的編程邏輯語句。
如何
與Oozie的工作將意味着你有一個GUI默認情況下,創建工作流程,如果您使用的色調。另請參閱截圖。
在你的情況,你可以在一個界面中添加您的樣品Hadoop的命令,你可以在你映射器領域,減速機等指定然後你就可以安排您的工作流程。
正如你可以看到,有很多Oozie的作業模板,如圖減少工作。如果您沒有特定的工作模板,則可以使用Java實現您自己的Oozie作業。底下,Oozie將內容存儲在XML文件中,因此您可以使用XML編輯工作流和作業。
<workflow-app xmlns="uri:oozie:workflow:0.2"
name="whitehouse-workflow">
<start to="transform_input"/>
<action name="transform_sample_pig">
<pig>
<job-tracker>${resourceManager}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="pig_store"/>
</prepare>
<script>mypig.pig</script>
</pig>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
</message>
</kill>
<end name="end"/>
調度/運行 一旦您編輯的工作流程和設計它,你也運行的選項,或安排您的工作流程。調度是一個嚮導,允許您定義頻率,輸入數據或更高級主題(如併發)等詳細信息。
這顯示了oozie與腳本實現相比的另一個優點。如果您與那些偶爾會被允許觸發工作流程的用戶進行協作,則會創建額外的工作來將腳本實施集成到GUI中。隨着Oozie,它只需點擊並完成。
權衡
像往常一樣,有最好的工具沒有靈丹妙藥可以解決一切。使用Hadoop解決方案,您將不得不學習一個特定的工具。它增加了一條學習曲線來了解Oozie,Luigi或Azkaban如何工作。
如果您對編程語言已經很熟悉,則不需要此學習曲線。使用腳本語言並將腳本添加到調度程序(如cron)。您擁有所有的編程能力來對異常做出反應並自定義您的工作流程。你放棄編程權力的UI的舒適。
總結一下,如果您只需要簡單的工作來安排任何Hadoop特定解決方案就足夠了。在一定的複雜性和定製化的情況下,使用python的實現以維護爲代價增加了靈活性。
還有第三個選項。市場上有很多專業的ETL解決方案,例如Informatica,Talend或OSI。
你想運行這個工作的頻率是多少?您可以創建一個shell腳本並將其寫入該腳本並將其安排到unix cron中。這是最簡單的方法。有許多調度工具可用,如Apache Oozie或像Tidal這樣的企業軟件。 – YoungHobbit
我想通過服務器上的POST請求運行它,或者當新數據輸入到hdfs中時,我的意思是說有任何方法可以自動生成批處理視圖或經驗法則?或者這些命令是手動運行的? –
我假設你已經在你的hadoop集羣中設置了oozie服務器和客戶端。您可以在oozie工作流xml中定義處理組件,使用帶'streaming'配置的'map-reduce'動作。要根據時間(如每日)或數據運行任何工作流程,可以使用oozie協調器並安排它。 – YoungHobbit