2015-10-04 62 views
1

我有一種情況,在一個POC期間我想在一個作業中創建一個嵌套的MapReduce。就像Map M1 O/P到Reducer R1 O/P一樣,那麼R1的輸出就會到M2,最終的輸出將會與M2一起出現,或者我們可以用M2 O/P來運行R2。鏈接地圖減少程序

單個作業ID - M1-> R1-> M2-> R2 ...最終輸出將位於單個O/P文件中。

我們可以在沒有Oozie的情況下做到嗎?

回答

1

您可以在您的Driver類中鏈接多個作業。首先,通過定義所有必需的配置爲第一個MapReduce創建一個作業。然後通過以下方式照常開始工作:

job1.waitForCompletion(true); 

這是等到作業完成。現在檢查第一個作業的最終狀態,無論是失敗還是成功進行適當的下一步操作。

如果第一個作業成功完成,則以相同的方式啓動下一個MapReduce。首先定義所需參數並啓動工作:

job2.waitForCompletion(true); 

重要的是第一個輸出路徑將被輸入第二個工作。這是串行(順序)作業鏈,因爲這兩個作業將會一個接一個地運行。

+1

我試圖做到這一點,而不開始第二份工作。有可能嗎?我不確定對於一個工作將只有一個地圖和一個減速器只..可以請你解釋.. –

+0

@PardeepSharma我不認爲這是可能的。如果你可以更多地描述問題,那麼我可以說更多的話。這個'M1-> R1-> M2-> R2'被稱爲鏈接,我回答了。 – YoungHobbit

+1

感謝@YoungHobbit的回覆..這裏的第一件事是我只想在同一時間只運行一個工作,不會再有任何與此POC相關的工作。所以事情是一個映射器將運行然後一個reducer將運行一個更多的映射器和一個reducer。是否有可能......換句話說,我們可以說第一個映射器輸出將被輸入到第一個reducer,第一個reducer的O/P將被輸入第二個映射器,等等。 –

0

您還可以使用作業控制,您可以在其中執行一系列地圖縮減作業。在你的情況下,有兩個映射器和兩個或一個reducer。如果不需要減速器,則可以使用兩個縮減作業,對於可以使用的第二個作業,將縮減器的數量設置爲零。

+1

感謝Madhu的回覆..第一件事這裏是我想一次只運行一個工作,但不會有更多與此POC相關的工作。所以事情是一個映射器將運行然後一個reducer將運行一個更多的映射器和一個reducer。是否可以......換句話說,我們可以說第一個映射器輸出將被輸入到第一個reducer,第一個reducer的O/P將被輸入到第二個映射器等等。 –