2011-12-16 60 views
0

我的問題涉及到這個職位Sorting large data using MapReduce/Hadoop。 我排序的任意設定的思路是:如何使用Hadoop對任意大量的數據進行排序?

  1. 我們有記錄的大型文件,比如10^9條。
  2. 該文件被劃分爲M個映射器。每個映射器對大小進行分割,比如說使用QuickSort的10000條記錄,並輸出排序後的子序列。輸出鍵範圍在1到R之間,其中R是減速任務的數量(假設R = 4)。該值是已排序的子序列。
  3. 每個Reducer讀取K個子序列併合並它們(迭代地從子序列中取最小元素,直到子序列爲空)。輸出寫入文件。

那麼下面的處理完成:

要利用數據的局部性的優勢,新的減速任務可以安排到合併由以前的減速任務產生了一些輸出文件。因此,例如,如果K = 5,則第一個減速器任務將生成50000個大小的文件,而新減速器任務將與每個50000個排序記錄的5個文件一起工作。新Reducer作業將被調度,直到只剩下一個文件,在這種情況下,大小爲250.000.000(因爲R = 4)。最後,一個新的減速工作會安排另一臺機器上的文件合併成一個單一的10^9文件

我的問題:是否有可能在Hadoop中安排減速作業的執行以這樣一種方式,他們合併某些目錄中的文件直到只剩下1個文件?如果是,如何?

另一種情況是在每個合併步驟之後計劃MapReduce作業,例如,大小爲50000的文件可以通過減少在其他機器上運行的任務,然後在其他機器上運行大小爲250.000的文件來並行合併等。但是這會產生大量的網絡流量。無論如何,這個問題對於這種情況仍然有效 - 如何鏈接幾個MapReduce作業,以便在輸出一個結果文件後停止鏈接?

+0

沒有開銷,它爲您做了所有的事情,它確實是最佳的。他們贏得了terasort基準。 – 2011-12-16 19:13:12

回答

相關問題