Scala 更改spark\u临时目录路径以避免删除拼花
当两个或多个Spark作业具有相同的输出目录时,将不可避免地相互删除文件 我正在使用spark 2.4.4以追加模式编写一个数据帧,我想在spark的tmp目录中添加一个时间戳,以避免这些删除 例如: 我的工作火花写入Scala 更改spark\u临时目录路径以避免删除拼花,scala,hadoop,spark2.4.4,Scala,Hadoop,Spark2.4.4,当两个或多个Spark作业具有相同的输出目录时,将不可避免地相互删除文件 我正在使用spark 2.4.4以追加模式编写一个数据帧,我想在spark的tmp目录中添加一个时间戳,以避免这些删除 例如: 我的工作火花写入hdfs:/outputFile/0/tmp/file1.parquet 使用其他数据调用相同的spark作业并写入hdfs:/outputFil/0/tm/file2.parquet 我想要jobSpark1写入hdfs:/outputFile/0/tmp+(时间戳)/file1
hdfs:/outputFile/0/tmp/file1.parquet
使用其他数据调用相同的spark作业并写入hdfs:/outputFil/0/tm/file2.parquet
我想要jobSpark1写入hdfs:/outputFile/0/tmp+(时间戳)/file1.parquet
另一个作业写入hdfs:/outputFile/0/tmp+(timeStamp)/file2.parquet
并将parquets下一步移动到hdfs:/outputFile/
df
.write
.option("mapreduce.fileoutputcommitter.algorithm.version", "2")
.partitionBy("XXXXXXXX")
.mode(SaveMode.Append)
.format(fileFormat)
.save(path)
当Spark将数据附加到现有数据集时,Spark使用FileOutputCommitter管理暂存输出文件和最终输出文件。FileOutputCommitter的行为直接影响写入数据的作业的性能
FileOutputCommitter有两种方法,commitTask和commitJob。Apache Spark 2.0及更高版本使用Apache Hadoop 2,它使用mapreduce.fileoutputcommitter.algorithm.version的值来控制commitTask和commitJob的工作方式。在Hadoop 2中,mapreduce.fileoutputcommitter.algorithm.version的默认值为1。对于此版本,commitTask将任务生成的数据从任务临时目录移动到作业临时目录,当所有任务完成时,commitJob将数据从作业临时目录移动到最终目标
因为驱动程序正在执行commitJob的工作,所以对于云存储,此操作可能需要很长时间。你可能经常认为你的手机“挂着”。但是,当mapreduce.fileoutputcommitter.algorithm.version的值为2时,commitTask会将任务生成的数据直接移动到最终目标,commitJob基本上是不可操作的。这是否回答了您的问题?