停止 hadoop/EMR/AWS 创建带有 _$folder$ 扩展名的 S3 路径
Stop hadoop/EMR/AWS creating S3 paths with _$folder$ extensions
运行 EMR 上的 spark 作业,输出直接写入 S3。我注意到每个 S3 目录路径(例如 /the/s3/path
)都包含一个名为 /the/s3/path_$folder$
的标志文件。这导致使用 spark 重新加载数据时出现问题(它是镶木地板,spark 抱怨额外的文件等)。
如何阻止 AWS/whatever 它创建此标志?它过去也发生在 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...
中禁用它们
运行 EMR 上的 spark 作业,输出直接写入 S3。我注意到每个 S3 目录路径(例如 /the/s3/path
)都包含一个名为 /the/s3/path_$folder$
的标志文件。这导致使用 spark 重新加载数据时出现问题(它是镶木地板,spark 抱怨额外的文件等)。
如何阻止 AWS/whatever 它创建此标志?它过去也发生在 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...