spark 2.x通过分区写入镶木地板与hdfs相比非常慢

时间:2017-06-08 13:23:39

标签: apache-spark amazon-s3 hdfs

无法弄清楚从哪里开始排除故障为什么通过分区从spark / scala到hdfs的简单写入是几秒钟而不是几分钟写入s3时。

    def saveDF(df: org.apache.spark.sql.DataFrame) : Unit = {

      df.write
        .mode("overwrite")
        .option("compression", "snappy")
        .partitionBy("col")
//        .parquet(s"hdfs://localhost:9000/${fileout}") // this is a few seconds
        .parquet(s"s3a://${s3bucket}/${s3folder}/${fileout}") // this is a few minutes
    }

2 个答案:

答案 0 :(得分:1)

尝试以下配置以提高性能

--conf "spark.sql.parquet.enable.summary-metadata=false"\
--conf "spark.hadooop.mapreduce.fileoutputcommitter.algorithm.version=2"\

但是,您将无法获得与hdfs相同的性能。问题在于s3中的提交算法和提交实现(从s3中的_temporary文件夹移动不是像hdfs中的O(1),而是O(n))

答案 1 :(得分:1)

这是因为您的HDFS群集共同习惯您的AWS EMR群集,而您的s3访问需要在数据中心内移动数据。