我在這裏尋找一個解決方案來解決我這個簡單的愚蠢問題。 說,我有一個巨大的10GB文本文件,記錄由'\ n'分隔,我提供該文件作爲Hadoop框架的輸入。 輸出應該是一個文件,使其保持與輸入文件相同的記錄順序,但每個記錄前都有一個序列號。使用Hadoop爲文本文件中的每個記錄添加序列號MapReduce
對於例如,
如果我有一個輸入文本文件說,
this is line one
this is line two
this is line three
this is line four
-----------------
-----------------
輸出文件應該是,
1 this is line one
2 this is line two
3 this is line three
4 this is line four
------------------
-----------------
編輯:假設10GB的文件我有一個代替10 TB文件,那麼現在可以做什麼? 而不是使用Hadoop方式處理文件可能是另一種更好的方法來實現它更快?
此外,我也想使用多個reducer而不是一個reducer。
說,而不是一個10GB的文件我有一個10TB的文件,所以現在可以做什麼?如果使用Hadoop處理文件不是正確的方式,那麼可以採用其他更好的方法來更快地執行該文件? –
你必須考慮的是分佈式處理(如hadoop)很好地分佈。因此,您必須考慮將原始數據傳輸到處理節點以及接收和合並所有結果的開銷。對於淨收益,處理成本必須超過分銷和合併成本。在你的例子中,一個更大的文件實際上會使分發的情況更加不那麼引人注目,因爲這樣一個簡單的處理步驟(爲每行添加id)。一個技巧將是兩個硬盤驅動器,一個用於閱讀和一個用於寫作。 – pap
我看到的問題是您打算如何維護Hadoop上的編號。如果你能夠將文件分成子文件,每個文件的編號都是1..n,那麼我將使用Hadoop。如果您需要全局編號的行,那麼在Hadoop中實現會很棘手。您可能需要額外的預處理,這可能實際上更昂貴。 –