有没有可能换个房间 _temporary spark在写入之前保存临时文件的目录?特别是,因为我正在编写一个表的单个分区,所以我希望临时文件夹位于分区文件夹中。有可能吗?
_temporary
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/
1条答案
按热度按时间r7s23pms1#
无法使用默认的fileoutputcommitter,因为它的实现,fileoutputcommitter会创建一个${mapred.output.dir}/\u临时子目录,在该子目录中写入文件,然后在提交后,将其移动到${mapred.output.dir}。
最后,整个临时文件夹被删除。当两个或多个spark作业具有相同的输出目录时,文件的相互删除将不可避免。
最后,我下载了org.apache.hadoop.mapred.fileoutputcomitter,并对org.apache.hadoop.mapreduce.lib.output.fileoutputcomitter(您可以将其命名为yourfileoutputcomitter)进行了一些更改,允许临时重命名
在驱动程序中,必须添加以下代码:
注意:最好使用multipletextoutputformat重命名文件,因为写入同一位置的两个作业可以相互重写。
更新
我在我们的科技博客上写了一篇短文,里面有更多的细节https://www.outbrain.com/techblog/2020/03/how-you-can-set-many-spark-jobs-write-to-the-same-path/