2012-03-14 239 views
2

我使用Hadoop開發Map/Reduce。 我的驅動程序程序將MapReduce作業(使用Map和Reduce任務)提交給Hadoop的Job跟蹤器。我有兩個問題: a)我的Map或reduce任務可以提交另一個MapReduce作業嗎? (使用相同的羣集Hadoop和相同的Job Tracker)。這意味着,我開始的驅動程序提交一個mapreduce作業,其中,map或reduce任務產生另一個MapReduce作業,並將其提交給同一個集羣Hadoop和同一個作業跟蹤器。我認爲這是可能的。但是我不確定。而且,這是一個好的解決方案?如果不是,我們能否有另一種解決方案?地圖減少地圖減少

二)我們可以用兩種地圖的任務(有兩個不同的功能和一個在MapReduce工作Reduce任務? 非常感謝

+1

什麼是你試圖通過從MapReduce工作中推出MapReduce作業完成了嗎? – 2012-03-15 01:57:52

+0

我有兩個輸入大型數據集(set1和set2)。對於set1的每個記錄元素,我需要集合2的所有元素才能處理它。所以我打算讓我的驅動程序將set1作爲輸入數據提交給mapreduce作業。然後,在Map Task中,爲了處理set1的記錄元素,我打算提交另一個輸入數據爲set2的mapReduce作業。我不知道這可能與否。我認爲這在理論上是可能的,但不可能,因爲沒有插槽可用。如果我的Map函數使用另一個JobTracker將另一個MapReduce作業提交給另一個Hadoop集羣,這是可能的嗎? – 2012-03-15 16:01:45

回答

1

你當然可以連鎖使用ChainMapper class

您可以將多個地圖階段還可以使用JobControl類和addDependingJob()方法設置作業之間的依賴關係,這可能更適合將Map Reduce作業從其他Map Reduce作業產生出來,這違背了Map Reduce的基本方法,因爲它可能會導致您的解決方案不再是對單個節點上的硬件故障具有很強的可靠性。

Chuck Lam的Hadoop在行動的第5章很好地概述了這一點。

0

不,我不認爲它是可能的。另一種解決方案是啓動一個單獨的MapReduce任務,輸入爲set1和set2,在Map階段,添加if條件,如果元組讀取來自set 1,則將其添加到arraylist1,如果來自set 2,則將其添加到arraylist2 。然後你用這兩個數組列表做任何你想做的事!

0

您應該查看Cascading,這是將某個mapreduce作業的輸出連鎖(或「級聯」)到另一個mapcreduce作業的輸出。它抽象出了實現這一目標所需的大量工作,並允許開發人員在更高的層次上編寫複雜的多步驟mapreduce作業。

0

我建議你看看Oozie框架。