2015-12-22 124 views
1

我在這一領域的初學者所以不知道確切的術語,遺憾的是自動化Hadoop的批處理命令

試題庫:希望自動批量層的處理

問題:我無法理解人們如何管理像

"hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.4.0.jar \ 
    -mapper mapper.py \ 
    -reducer reducer.py \ 
    -input nfldata/stadiums \ 
    -output nfldata/pythonoutput \ 
    -file simple/mapper.py \ 
    -file simple/reducer.py" 
每次需要運行圖減少工作時間

運行Hadoop的大命令,有沒有什麼辦法來自動ŧ他像cron或東西處理,請讓我知道如果有任何的資源,以瞭解這使我們可以安排與蟒蛇或bash腳本Hadoop的命令或某事

我有什麼搜索:路易吉是什麼建議( here)建設罐子或運行命令,但沒有關於它的

注意任何文件或樣本:因爲我不知道Java的我還沒有搜查,不能使用選項在java中。

+1

你想運行這個工作的頻率是多少?您可以創建一個shell腳本並將其寫入該腳本並將其安排到unix cron中。這是最簡單的方法。有許多調度工具可用,如Apache Oozie或像Tidal這樣的企業軟件。 – YoungHobbit

+0

我想通過服務器上的POST請求運行它,或者當新數據輸入到hdfs中時,我的意思是說有任何方法可以自動生成批處理視圖或經驗法則?或者這些命令是手動運行的? –

+0

我假設你已經在你的hadoop集羣中設置了oozie服務器和客戶端。您可以在oozie工作流xml中定義處理組件,使用帶'streaming'配置的'map-reduce'動作。要根據時間(如每日)或數據運行任何工作流程,可以使用oozie協調器並安排它。 – YoungHobbit

回答

1

您可以選擇Hadoop解決方案和非Hadoop解決方案。

Hadoop的解決方案

Hadoop的具有用於這種情況下的三個主要框架:

每個框架都有其優點和缺點。例如,Oozie強烈基於XML(許多人不喜歡),您可以編寫可添加到oozie工作流引擎的作業。人們通常喜歡Oozie的是他們有一個GUI來設計工作流程。

有關Hadoop工作流程解決方案的詳細信息,請參閱Google對這些語言的比較。有可用的

非Hadoop的解決方案很多,科指南comparisions

寫在任何語言中您的工作流程的代碼(最有可能的腳本語言如Python,bash或Perl的適合多地進入該用例比一種編譯語言)。將此應用程序添加到cron作業,然後定期運行應用程序。

在應用程序中調用所有命令(如hdfs dfshadoop jar)。您非常靈活地捕捉異常或準備好所有您需要的編程邏輯語句。

如何

與Oozie的工作將意味着你有一個GUI默認情況下,創建工作流程,如果您使用的色調。另請參閱截圖。 enter image description here

在你的情況,你可以在一個界面中添加您的樣品Hadoop的命令,你可以在你映射器領域,減速機等指定然後你就可以安排您的工作流程。

enter image description here

正如你可以看到,有很多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,它只需點擊並完成。

scheduling

權衡

像往常一樣,有最好的工具沒有靈丹妙藥可以解決一切。使用Hadoop解決方案,您將不得不學習一個特定的工具。它增加了一條學習曲線來了解Oozie,Luigi或Azkaban如何工作。

如果您對編程語言已經很熟悉,則不需要此學習曲線。使用腳本語言並將腳本添加到調度程序(如cron)。您擁有所有的編程能力來對異常做出反應並自定義您的工作流程。你放棄編程權力的UI的舒適。

總結一下,如果您只需要簡單的工作來安排任何Hadoop特定解決方案就足夠了。在一定的複雜性和定製化的情況下,使用python的實現以維護爲代價增加了靈活性。

還有第三個選項。市場上有很多專業的ETL解決方案,例如Informatica,Talend或OSI。

+0

感謝您回答這個問題,我已經閱讀了luigi和oozie,但是我正在尋找答案的「怎麼樣」部分,只是一個簡單的例子,因爲像框架這樣的oozie很複雜,我只想設置一個任務,只要數據到達我需要運行hadoop語句 –

+0

我在 –

+0

上增加了一些信息,感謝提供這些細節,以便默認情況下它可以被接受爲賞金。你可以添加最後的東西,在oozie哪裏我們可以放置時間或條件什麼時候會被執行?我的意思是像每一天自動在某個時間? 再次非常感謝這 –