【问题标题】:Stop hadoop/EMR/AWS creating S3 paths with _$folder$ extensions停止使用 _$folder$ 扩展的 hadoop/EMR/AWS 创建 S3 路径
【发布时间】:2016-06-03 22:12:30
【问题描述】:

在 EMR 上运行 spark 作业,并将输出直接写入 S3。我注意到每个 S3 目录路径(例如 /the/s3/path)都包含一个名为 /the/s3/path_$folder$ 的标志文件。这会导致使用 spark 重新加载数据时出现问题(它是 parquet 并且 spark 抱怨额外的文件等)。

如何阻止 AWS/无论它是什么创建此标志?它曾经也发生在 hadoop 作业中,所以我认为这不是火花(尽管它使用了 hadoop FS 的东西)。

【问题讨论】:

    标签: hadoop amazon-web-services amazon-s3 apache-spark emr


    【解决方案1】:

    嗯,是的,我以前也获取这些文件夹,但它们不再出现...我怀疑这是因为我对 hadoopConfiguration 进行了这些更改:

    sc.hadoopConfiguration.set("spark.sql.parquet.output.committer.class","org.apache.spark.sql.parquet.DirectParquetOutputCommitter")
    sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
    sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")
    

    除了将输出直接提交到 S3 之外,这些设置还阻止了元数据文件的创建,这些元数据文件显然没有任何实际用途,而且只会占用大量时间来创建。

    我尚未验证这些设置是否会产生影响,但我强烈怀疑它们会产生影响。这些天我可以检查它,除非你打败我;)

    编辑:

    DirectOuputCommitter 在 Spark 2.x 中不再可用。在 Spark 2.x 中避免临时写入 S3 的方法是将此设置添加到您的 Spark Conf

    spark.conf.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
    

    (注意hadoopConfiguration上不再设置)。但是,这不会删除_$folder$ 文件夹。我还没有弄清楚如何在 Spark 2.x 中禁用它们...

    【讨论】:

    • 谢谢。我已经获得了其中一种设置,但我会尝试其他设置。
    • 看来 DirectParquetOutputCommitter 删除了 _$folder$ 标志,同时仍然保留了我想要的 _SUCCESS 文件。谢谢
    • 看来这在 spark 2.0 中不再有效,请参阅dev.sortable.com/spark-directparquetoutputcommitter
    • @Thomas Luechtefeld 我已经更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多