【问题标题】:Spark 2.3 dynamic partitionBy not working on S3 AWS EMR 5.13.0Spark 2.3 动态分区不使用 S3 AWS EMR 5.13.0
【发布时间】:2018-10-21 00:56:36
【问题描述】:

Spark 2.3 引入的动态分区在写入 S3 时似乎不适用于 AWS 的 EMR 5.13.0

执行时,会在 S3 中创建一个临时目录,但在处理完成后它会消失,而不会将新数据写入最终文件夹结构。

在 EMR 5.13.0 上执行 Scala/Spark 2.3 应用程序时发现此问题。

配置如下:

var spark = SparkSession
  .builder
  .appName(MyClass.getClass.getSimpleName)
  .getOrCreate()

spark.conf.set("spark.sql.sources.partitionOverwriteMode","DYNAMIC") // also tried "dynamic"

写入 S3 的代码:

val myDataset : Dataset[MyType] = ...

val w = myDataset
    .coalesce(10)
    .write
    .option("encoding", "UTF-8")
    .option("compression", "snappy")
    .mode("overwrite")
    .partitionBy("col_1","col_2")

w.parquet(s"$destinationPath/" + Constants.MyTypeTableName)

destinationPath 是一个 S3 存储桶/文件夹

其他人遇到过这个问题吗?

【问题讨论】:

  • 我看到了完全相同的问题。你找到答案了吗?
  • 很遗憾没有。
  • 好的,谢谢你让我知道。

标签: scala apache-spark amazon-s3 bigdata amazon-emr


【解决方案1】:

升级到 EMR 5.19 解决了这个问题。然而我之前的回答是不正确的——使用 EMRFS S3-optimized Committer 与它无关。当 spark.sql.sources.partitionOverwriteMode 设置为动态时,EMRFS S3 优化的 Committer 会被静默跳过:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-committer-reqs.html

如果您可以升级到至少 EMR 5.19.0,AWS 的 EMRFS S3-optimized Committer 可以解决这些问题。

--conf spark.sql.parquet.fs.optimized.committer.optimization-enabled=true

见:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-optimized-committer.html

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 2016-05-16
    • 2018-04-26
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多