我需要上传一个数据文件到S3桶,但我没有删除桶的权限。有没有办法避免在_temporary上创建这个S3目录?也许任何方式都可以使用本地FS作为_temporary目录,然后将最终的结果文件上传到S3桶,或者完全避免使用_temporary目录。
提前谢谢。
发布于 2017-10-11 13:53:30
不是的。
数据被写入_temporary/jobAttemptID/taskAttemptID/,然后在任务/作业提交期间重命名为dest dir。
您可以做的是为您的作业写入hdfs,然后使用distcp复制。这方面有很多优点,尤其是“有了一致的文件系统,您就不会面临来自s3n或s3a连接器的数据丢失的风险”。
2019-07-11更新。Apache S3A提交器允许您在没有临时文件夹或重命名的情况下提交工作,即使在不一致的S3存储区中也可以交付性能和纠正结果。这就是如何安全地提交工作。Amazon对自己的工作有自己的重新实现,尽管(目前还没有斯派克期望的完全失败语义)。
发布于 2019-05-30 12:24:40
是的,在将数据文件上载到_temporary时,可以避免创建s3目录。
当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") )中设置数据。https://stackoverflow.com/questions/46665299
复制相似问题