【问题标题】:spark 2.x write to parquet by partition compared to hdfs extremely slow与 hdfs 相比,spark 2.x 按分区写入镶木地板非常慢
【发布时间】:2017-11-10 05:51:12
【问题描述】:

无法弄清楚从哪里开始排除故障,为什么从 spark/scala 分区到 hdfs 的简单写入 parquet 将需要几秒钟,而当我写入 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
    }

【问题讨论】:

    标签: apache-spark amazon-s3 hdfs


    【解决方案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))

    【讨论】:

      【解决方案2】:

      这是因为您的 HDFS 集群与您的 AWS EMR 集群共存,而您的 s3 访问需要跨数据中心移动数据。

      【讨论】:

        猜你喜欢
        • 2017-03-17
        • 2016-07-07
        • 2019-05-07
        • 2018-10-27
        • 2020-04-22
        • 1970-01-01
        • 2016-08-12
        • 2018-12-23
        • 1970-01-01
        相关资源
        最近更新 更多