2012-05-30 51 views
0

我在這裏尋找一個解決方案來解決我這個簡單的愚蠢問題。 說,我有一個巨大的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。

回答

0

與僅打開文件,逐行讀取並將每行存儲在新文件中(序列/序列號預先存在)相比,不確定從Hadoop獲得的任何操作對於如此簡單的操作都有好處。

1

我同意pap,這裏不需要Hadoop。檢查命令nl,它在文件的每一行之前添加行號。只需將輸出存儲在新文件中即可。

$ cat testFile 
line1 
line2 
line3 

$ nl testFile 
    1 line1 
    2 line2 
    3 line3 
+0

說,而不是一個10GB的文件我有一個10TB的文件,所以現在可以做什麼?如果使用Hadoop處理文件不是正確的方式,那麼可以採用其他更好的方法來更快地執行該文件? –

+0

你必須考慮的是分佈式處理(如hadoop)很好地分佈。因此,您必須考慮將原始數據傳輸到處理節點以及接收和合並所有結果的開銷。對於淨收益,處理成本必須超過分銷和合併成本。在你的例子中,一個更大的文件實際上會使分發的情況更加不那麼引人注目,因爲這樣一個簡單的處理步驟(爲每行添加id)。一個技巧將是兩個硬盤驅動器,一個用於閱讀和一個用於寫作。 – pap

+0

我看到的問題是您打算如何維護Hadoop上的編號。如果你能夠將文件分成子文件,每個文件的編號都是1..n,那麼我將使用Hadoop。如果您需要全局編號的行,那麼在Hadoop中實現會很棘手。您可能需要額外的預處理,這可能實際上更昂貴。 –

相關問題