首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免在_temporary中创建S3目录

避免在_temporary中创建S3目录
EN

Stack Overflow用户
提问于 2017-10-10 11:11:09
回答 2查看 10.6K关注 0票数 9

我需要上传一个数据文件到S3桶,但我没有删除桶的权限。有没有办法避免在_temporary上创建这个S3目录?也许任何方式都可以使用本地FS作为_temporary目录,然后将最终的结果文件上传到S3桶,或者完全避免使用_temporary目录。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-11 13:53:30

不是的。

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

您可以做的是为您的作业写入hdfs,然后使用distcp复制。这方面有很多优点,尤其是“有了一致的文件系统,您就不会面临来自s3n或s3a连接器的数据丢失的风险”。

2019-07-11更新。Apache S3A提交器允许您在没有临时文件夹或重命名的情况下提交工作,即使在不一致的S3存储区中也可以交付性能和纠正结果。这就是如何安全地提交工作。Amazon对自己的工作有自己的重新实现,尽管(目前还没有斯派克期望的完全失败语义)。

票数 12
EN

Stack Overflow用户

发布于 2019-05-30 12:24:40

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

当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") )中设置数据。

阅读有关输出提交器算法版本数据库-博客映射-默认的更多信息

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46665299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档