我開發的星火計劃。我需要有一個文件的結果,所以有兩種方式合併結果:星火聚結VS HDFS getmerge
- 合併(火花):
myRDD.coalesce(1,FALSE).saveAsTextFile (pathOut);
- 合併之後它在HDFS:
Hadoop的FS -getmerge pathOut了localPath
哪一個是最有效,最快捷?
是否有任何其他的方法來在HDFS文件合併,而不是它獲取到本地路徑(如「getmerge」)結果保存到HDFS,?
我開發的星火計劃。我需要有一個文件的結果,所以有兩種方式合併結果:星火聚結VS HDFS getmerge
myRDD.coalesce(1,FALSE).saveAsTextFile (pathOut);
Hadoop的FS -getmerge pathOut了localPath
哪一個是最有效,最快捷?
是否有任何其他的方法來在HDFS文件合併,而不是它獲取到本地路徑(如「getmerge」)結果保存到HDFS,?
如果您正在處理大型數據集(我假設您是),我建議讓Spark將每個分區寫入HDFS中自己的「part」文件,然後使用hadoop fs -getMerge
從HDFS中提取單個輸出文件目錄。
星火將數據分割成效率分區,所以它可以分發許多工人節點間的工作量。如果合併到一個小數目的分區,可以減少它的分發工作的能力,並且只需一分區你把一個節點上的所有工作。最好的情況是這樣會變慢,在最壞的情況下,它會耗盡內存並使作業崩潰。
我強烈建議你不要使用'''FileUtil.copyMerge'''或'''Hadoop的FS -getmerge''',因爲它把數據複製到驅動器(查看源代碼)。 – Leonard
合併內存很大,也可能導致GC開銷。我只是在bash腳本中使用cat *來合併文件,這可以在單獨的json調用中觸發。 – GameOfThrows