2016-01-21 73 views
0

我可以修改駐留在hdfs上的文件嗎?是唯一的方法來創建一個修改後的內容的臨時文件,並放棄原始文件?使用mapreduce在hdfs上修改文件

我可以使用map-reduce修改文件嗎?可以將不同的文件塊並行修改,並以某種方式組合成單個文件?

回答

1

一旦文件處於HDFS中,除了附加到HDFS外,您無法修改它。看到這個答案,確認追加是可能的:

Append data to existing file in HDFS Java

地圖降低可以讓你在並行文件進行操作,每個映射器讀取文件塊,並同時運行許多映射器。這就是它的設計原理。

任何給定的映射器都可以對行進行過濾,並且可以很容易地將所有,部分或全部寫入新文件。

如果您使用map-reduce寫出修改後的文件,默認情況下它會顯示爲可根據您的要求組合成單個文件的文件目錄。

+0

嗨,非常感謝您的回覆。如何將輸出文件合併到一個文件時確保輸出序列化。我的意思是原始文件有塊1的數據,接着是塊2的數據,我的輸出文件也應該有塊1的數據,接着是塊2的數據,但是每個塊中的一些行被過濾掉了。這可能嗎 ? – user2783058

+0

在地圖縮小工作中,您將從1個文件開始,比如說10個塊。一個進程將讀取每個塊,如果您只想過濾一些行並寫出數據,則最終將在目錄中包含10個文件,每個文件對應於您的原始10個塊。這些文件將名稱爲00000至00010,我認爲它們的順序與原始塊相同,但我不確定。如果每個塊都可以獨立處理,你關心哪個塊是第一或第二塊? –

+0

如果排序很重要,請使用一個reducer運行map-reduce作業並對其進行排序 - 然後您將有一個包含N個塊和一個有保證的排序順序的文件。 –