在 EMR 上运行 spark 作业,输出直接写入 S3。我注意到每个 S3 目录路径(例如 /the/s3/path
)都包含一个名为 /the/s3/path_$folder$
的标志文件。这导致使用 spark 重新加载数据时出现问题(它是 Parquet ,spark 提示额外的文件等)。
我怎样才能阻止 AWS/无论它是什么来创建这个标志?它过去也发生在 hadoop 作业中,所以我不认为它是 spark(尽管它使用 hadoop FS 的东西)。
最佳答案
嗯,是的,我以前也获取过这些文件夹,但是它们不再出现了...我怀疑是因为我对 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 中禁用它们...
关于hadoop - 停止 hadoop/EMR/AWS 创建带有 _$folder$ 扩展名的 S3 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35554420/