2011-01-07 76 views
7

我在有兩個mapreduce作業的場景中。我更喜歡python,並計劃用它來編寫mapreduce腳本,並使用hadoop流式傳輸。當使用hadoop流式傳輸時,是否可以方便地將以下形式的作業鏈接起來?在Hadoop流中鏈接多個mapreduce任務

地圖1 - >降低1 - >地圖2 - >降低2

我已經聽說了很多的方法,在Java中做到這一點,但我需要的東西Hadoop的數據流。

回答

4

這是一篇關於如何使用Cascading和Streaming的博文。 http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

這裏的值是您可以在同一個應用程序中將Java(層疊查詢流)與您的自定義流式操作混合使用。我發現這比其他方法脆弱得多。

請注意,Cascading中的Cascade對象允許您鏈接多個Flow(通過上述博客文章,您的Streaming作業將成爲MapReduceFlow)。

免責聲明:我層疊

+0

嗯,我不知道這將如何工作。我提出了一個問題:http://stackoverflow.com/questions/35249753/call-mapper-when-reducer-is-done – gsamaras 2016-02-07 05:05:28

1

通常情況下,我在Hadoop流媒體和Python中執行此操作的方式來自我創建的用於首先運行作業的bash腳本。總是我從一個bash腳本運行,這樣我就可以通過錯誤和電子郵件獲得成功的電子郵件,並使它們更靈活地傳遞來自另一個Ruby或Python腳本的參數,這些腳本可以在更大的事件處理系統中工作。

所以,第一個命令(作業)的輸出是輸入下一個命令(作業),它可以通過在作爲命令行參數(簡單快捷)

在bash腳本變量

您可能希望結賬Oozie http://yahoo.github.com/oozie/design.html Hadoop的工作流引擎,這也將有助於做到這一點(支持流式傳輸,而不是問題)。當我開始時我沒有這個,所以我最終不得不建立我自己的東西,但這是一個很好的系統和有用的!

1

如果您已經用Python寫你的映射器和減速的作者,我會考慮使用其中的小飛象這樣的操作非常簡單。您的地圖序列減少了作業,您的映射器,縮減器等都在一個可以從命令行運行的python腳本中。

3

您可以試試Yelp's MRJob以完成您的工作..它是一個開源的MapReduce庫,允許您編寫可以在Hadoop集羣或EC2上的Hadoop Streaming上運行的鏈接作業​​。它的優雅和易用性,並且有一個稱爲「步驟」的方法,您可以重寫以指定您希望數據通過的確切的映射器和縮減器鏈。

結帳在https://github.com/Yelp/mrjob
和文檔源在http://packages.python.org/mrjob/