2014-09-25 70 views
4

當Apache Spark將其結果上載到S3時,我發現一個主要的性能問題。按我的理解它去這些步驟......最後階段的Apache Spark向S3上傳性能問題

  1. 輸出寫入_temp/表HDFS和相同的移動到文件夾"_temporary"具體S3文件夾內。

  2. 整個過程完成後--Apache spark完成saveAsTextFile階段,然後S3"_temporary"文件夾中的文件被移動到主文件夾中。這實際上需要很長時間[每個文件大約1分鐘(平均大小:600 MB BZ2)]。該部分未登錄日誌stderr

我使用Apache Spark 1.0.1Hadoop 2.2在AWS EMR。

有沒有人遇到過這個問題?

更新1

我怎樣才能提高做這個舉動進程的線程數?

任何建議高度讚賞...

感謝

回答

0

我用下面的功能。它將文件上傳到s3。它會在4-6分鐘內上傳60GB左右的gz文件。

 ctx.hadoopConfiguration().set("mapred.textoutputformat.separator", 
       ","); 
     counts.saveAsHadoopFile(s3outputpath, Text.class, Text.class, 
       TextOutputFormat.class); 

確保您創建更多的輸出文件。更多數量更小的文件將使上傳速度更快。

API細節 saveAsHadoopFile [F <:org.apache.hadoop.mapred.OutputFormat [_,]](路徑:字符串,keyClass:類[],valueClass:類[] outputFormatClass:Class [F],codec:Class [ <:org.apache.hadoop.io.compress.CompressionCodec]):單元 將RDD輸出到任何支持Hadoop的文件系統,並使用提供的編解碼器進行壓縮。

+0

你能否詳細說明你的答案?它不工作的形式...使用「Text.class」拋出錯誤... – user3279189 2014-09-29 09:57:13

+0

您可以使用函數作爲saveAsHadoopFile [F <:org.apache.hadoop.mapred.OutputFormat [_,_]](路徑:字符串, keyClass:Class [_],valueClass:Class [_],outputFormatClass:Class [F],codec:Class [_ <:org.apache.hadoop.io.compress.CompressionCodec]):單位 將RDD輸出到任何Hadoop支持的文件系統,使用提供的編解碼器進行壓縮。把課程放在你的鑰匙和價值上 – 2014-09-29 11:06:22