更改spark\u临时目录路径

vbkedwbf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(525)

有没有可能换个房间 _temporary spark在写入之前保存临时文件的目录?
特别是,因为我正在编写一个表的单个分区,所以我希望临时文件夹位于分区文件夹中。
有可能吗?

r7s23pms

r7s23pms1#

无法使用默认的fileoutputcommitter,因为它的实现,fileoutputcommitter会创建一个${mapred.output.dir}/\u临时子目录,在该子目录中写入文件,然后在提交后,将其移动到${mapred.output.dir}。
最后,整个临时文件夹被删除。当两个或多个spark作业具有相同的输出目录时,文件的相互删除将不可避免。
最后,我下载了org.apache.hadoop.mapred.fileoutputcomitter,并对org.apache.hadoop.mapreduce.lib.output.fileoutputcomitter(您可以将其命名为yourfileoutputcomitter)进行了一些更改,允许临时重命名
在驱动程序中,必须添加以下代码:

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/

相关问题