我需要将数据帧上传到S3存储桶,但我没有对存储桶的删除权限。有什么办法可以避免在S3上创建这个_temporary目录吗?也许有任何方法可以将本地FS用于_temporary目录,然后将最终生成的文件上传到S3存储桶或完全避免使用_temporary目录。
提前致谢。
答案 0 :(得分:4)
没有
将数据写入_temporary/jobAttemptID/taskAttemptID/
,然后在任务/作业提交期间重命名为dest目录。
您可以为您的作业写入hdfs,然后使用distcp进行复制。这有很多优点,尤其是"使用一致的文件系统,您不会冒险从s3n或s3a连接器中丢失数据"
答案 1 :(得分:0)
是的,在将数据帧上传到s3时,可以避免创建_temporary
目录。
Spark将数据追加到现有数据集时,Spark使用FileOutputCommitter
管理登台输出文件和最终输出文件。
默认情况下,输出提交器算法使用版本1。在此版本中,FileOutputCommitter
有两种方法,commitTask
和commitJob
。 commitTask
将任务生成的数据从任务临时目录移动到作业临时目录,当所有任务完成时,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.write.option("mapreduce.fileoutputcommitter.algorithm.version",
"2")
。详细了解输出提交者算法版本databricks-blog和mapred-default