更改 spark_temporary 目录路径

Posted

技术标签:

【中文标题】更改 spark_temporary 目录路径【英文标题】:Change spark _temporary directory path 【发布时间】:2019-08-30 22:20:51 【问题描述】:

是否可以在写入之前更改 spark 保存其临时文件的_temporary 目录?

特别是,由于我正在编写表的单个分区,因此我希望临时文件夹位于分区文件夹中。

有可能吗?

【问题讨论】:

你找到方法了吗? 不行,好像没办法 最后,我不得不重写 FileOutputCommitter 以使其工作。 @ArkadiyVerman 你能详细说明你是怎么做到的吗? 【参考方案1】:

由于它的实现,无法使用默认的 FileOutputCommitter,FileOutputCommiter 创建一个 $mapred.output.dir/_temporary 子目录,文件被写入并稍后,在已提交,移至 $mapred.output.dir

最后,整个临时文件夹被删除。当两个或多个 Spark 作业具有相同的输出目录时,文件的相互删除将是不可避免的。

最终,我下载了 org.apache.hadoop.mapred.FileOutputCommitterorg.apache.hadoop.mapreduce.lib.output .FileOutputCommitter(您可以将其命名为 YourFileOutputCommitter)进行了一些更改,允许 _temporaly 重命名

在您的驱动程序中,您必须添加以下代码:

val conf: JobConf = new JobConf(sc.hadoopConfiguration)
conf.setOutputCommitter(classOf[YourFileOutputCommitter])


// update temporary path for committer 
YourFileOutputCommitter.tempPath = "_tempJob1"

注意:最好使用 MultipleTextOutputFormat 来重命名文件,因为写入同一位置的两个作业可以相互覆盖。

更新

我在我们的技术博客中创建了简短的帖子,其中包含更多详细信息 https://www.outbrain.com/techblog/2020/03/how-you-can-set-many-spark-jobs-write-to-the-same-path/

【讨论】:

以上是关于更改 spark_temporary 目录路径的主要内容,如果未能解决你的问题,请参考以下文章

svn 常用操作命令

《Linux学习并不难》文件/目录管理:cd命令更改工作目录路径

更改 webpy 中的静态目录路径

ui:include 的路径无效

D. 更改虚拟目录

如何更改 kapt 插件生成输出目录路径?