簡體   English   中英

在Hadoop流中鏈接多個mapreduce任務

[英]Chaining multiple mapreduce tasks in Hadoop streaming

我在我有兩個mapreduce工作的情況下。 我更熟悉python並計划用它來編寫mapreduce腳本並使用hadoop流。 當使用hadoop流時,是否可以方便地將兩個作業鏈接起來?

Map1 - > Reduce1 - > Map2 - > Reduce2

我在java中聽說過很多方法可以實現這一點,但是我需要Hadoop流的東西。

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

這里的值是你可以在同一個應用程序中混合使用java(級聯查詢流)和自定義流操作。 我覺得這比其他方法要脆弱得多。

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

免責聲明:我是Cascading的作者

您可以嘗試Yelp的MRJob來完成您的工作。它是一個開源MapReduce庫,允許您編寫可以在Hadoop集群或EC2上的Hadoop Streaming上運行的鏈式作業。它非常優雅且易於使用,並且具有一個名為steps的方法,您可以覆蓋該方法以指定您希望數據通過的映射器和縮減器的確切鏈。

https://github.com/Yelp/mrjob上查看源代碼
http://packages.python.org/mrjob/上的文檔

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

因此,第一個命令(作業)的輸出是下一個命令(作業)的輸入,它可以是作為參數從命令行傳入的bash腳本中的變量(簡單快捷)

您可能想要查看Oozie http://yahoo.github.com/oozie/design.html Hadoop的工作流引擎,這也有助於實現此目的(支持流式傳輸,而不是問題)。 我開始時沒有這個,所以我最終不得不建立自己的東西,但這是一個kewl系統,很有用!!!!

如果您已經在Python中編寫mapper和reducer,我會考慮使用Dumbo這樣的操作很簡單。 地圖減少作業,mapper,reducer等的序列都在一個可以從命令行運行的python腳本中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM