当Apache Spark将其结果上传到S3时,我发现了一个主要的性能问题。根据我的理解,它采取了这些步骤......
最终阶段的输出将写入HDFS中的_temp/
表格,并将其移至特定"_temporary"
文件夹内的S3
文件夹中。
完成整个过程后--Apache spark完成saveAsTextFile
阶段,然后将"_temporary"
中S3
文件夹中的文件移动到主文件夹中。这实际上需要很长时间[每个文件大约1分钟(平均大小:600 MB BZ2)]。此部分未记录在通常的stderr
日志中。
我在AWS EMR上使用Apache Spark 1.0.1
和Hadoop 2.2
。
有没有人遇到过这个问题?
更新1
如何增加执行此移动过程的线程数?
任何建议都受到高度赞赏......
由于
答案 0 :(得分:4)
这是通过SPARK-3595(https://issues.apache.org/jira/browse/SPARK-3595)修复的。其中包含在构建1.1.0.e及更高版本中(参见https://github.com/awslabs/emr-bootstrap-actions/tree/master/spark)。
答案 1 :(得分:0)
我使用以下功能。它将文件上传到s3。它在4-6分钟内上传大约60 gb,gz文件。
ctx.hadoopConfiguration().set("mapred.textoutputformat.separator",
",");
counts.saveAsHadoopFile(s3outputpath, Text.class, Text.class,
TextOutputFormat.class);
确保创建更多输出文件。更多的小文件将使上传速度更快。
API详情 saveAsHadoopFile [F&lt ;: org.apache.hadoop.mapred.OutputFormat [_,]](路径:字符串, keyClass :类[], valueClass < / strong>:类[], outputFormatClass :类[F],编解码器:类[&lt ;: org.apache.hadoop.io.compress.CompressionCodec]):单元 将RDD输出到任何支持Hadoop的文件系统,并使用提供的编解码器进行压缩。