默認情況下,spark(2.4.4)使用 MapReduce.fileoutputcommitter.algorithm.version 1。我正在嘗試將其更改為版本 2。 spark-UI 并sparkCtx._conf.getAll()顯示版本 2,但 pyspark 仍然使用版本 1(臨時文件夾)將數據寫入 S3正在創建)。我已經嘗試過這些東西。spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 2在 spark-defaults.conf 中設置為 spark 會話定義 config("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version","2")。df.write 中的設置選項如下: df.write.option("mapreduce.fileoutputcommitter.algorithm.version", "2")
1 回答
慕田峪9158850
TA貢獻1794條經驗 獲得超8個贊
但 pyspark 仍然使用版本 1 將數據寫入 S3(正在創建臨時文件夾)。
首先,v1 和 v2 算法都使用臨時文件。如MAPREDUCE-6336中所述
算法版本 2 更改了 commitTask、recoverTask 和 commitJob 的行為。
commitTask 將 $joboutput/_temporary/$appAttemptID/_temporary/$taskAttemptID/ 中的所有文件重命名為 $joboutput/
recoverTask 嚴格來說是一個 nop,但是對于從版本 1 升級到版本 2 的情況,它會檢查 $joboutput/_temporary/($appAttemptID - 1)/$taskID/ 中是否有任何文件并將它們重命名為 $joboutput/
commitJob 刪除 $joboutput/_temporary 并寫入 $joboutput/_SUCCESS
因此,請確保您實際看到的是與 v1 而不是 v2 對應的更改。
此外spark.hadoop,選項適用于上下文而不是特定的寫入,因此您的第三次嘗試根本不起作用。
其余的應該是等價的(第二個,如果之前設置過SparkContext)。
添加回答
舉報
0/150
提交
取消
