停止hadoop/emr/aws创建带有\u$folder$扩展名的s3路径

lfapxunr  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(266)

在emr上运行spark作业,输出直接写入s3。我注意到每个s3目录路径(例如。 /the/s3/path )包含一个名为 /the/s3/path_$folder$ . 这会导致使用spark重新加载数据时出现问题(这是parquet,spark会抱怨额外的文件等)。
我怎样才能阻止aws/不管它是什么创建这个标志?hadoop作业也经常发生这种情况,所以我不认为它是spark(尽管它使用hadoop fs的东西)。

kupeojn6

kupeojn61#

嗯,是的,我以前也收到过这些文件夹,但是它们不再出现了。。。我怀疑是因为我对 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中不再提供。避免spark2.x中对s3进行临时写入的方法是将此设置添加到 Spark Conf :

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

(请注意,它不再设置在 hadoopConfiguration ). 然而,这并不能消除 _$folder$ 文件夹。我还没有解决如何在spark 2.x中禁用它们。。。

相关问题