Spark避免在S3中创建_temporary目录

时间:2017-10-10 11:11:09

标签: apache-spark amazon-s3

我需要将数据帧上传到S3存储桶,但我没有对存储桶的删除权限。有什么办法可以避免在S3上创建这个_temporary目录吗?也许有任何方法可以将本地FS用于_temporary目录,然后将最终生成的文件上传到S3存储桶或完全避免使用_temporary目录。

提前致谢。

2 个答案:

答案 0 :(得分:4)

没有

将数据写入_temporary/jobAttemptID/taskAttemptID/,然后在任务/作业提交期间重命名为dest目录。

您可以为您的作业写入hdfs,然后使用distcp进行复制。这有很多优点,尤其是"使用一致的文件系统,您不会冒险从s3n或s3a连接器中丢失数据"

答案 1 :(得分:0)

是的,在将数据帧上传到s3时,可以避免创建_temporary目录。

Spark将数据追加到现有数据集时,Spark使用FileOutputCommitter管理登台输出文件和最终输出文件。

默认情况下,输出提交器算法使用版本1。在此版本中,FileOutputCommitter有两种方法,commitTaskcommitJobcommitTask将任务生成的数据从任务临时目录移动到作业临时目录,当所有任务完成时,commitJob将数据从作业临时目录移动到最终目标。

但是,当输出提交器算法使用版本2时,commitTask会将任务生成的数据直接移动到最终目的地,而commitJob基本上是无操作的。

如何将spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version设置为2? 您可以使用以下任何一种方法来设置此配置:

  • 启动集群时,可以将 spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 2在 Spark配置
  • spark.conf.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
  • 使用Dataset API写入数据时,可以在 选项,即 dataset.write.option("mapreduce.fileoutputcommitter.algorithm.version", "2")

详细了解输出提交者算法版本databricks-blogmapred-default