Scala 更改spark\u临时目录路径以避免删除拼花

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

当两个或多个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.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基本上是不可操作的。这是否回答了您的问题?