私が実行しているspark job
2つのワーカーノードを持つクラスタに!私は、ワーカーノードにCSVとして計算されたデータフレームを保存するための(スパークjavaの)以下のコードを使用しています。
dataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath);
私は火花が各ワーカーノード上で複数のパーツファイルを書き込む方法を理解しようとしています。
RUN1)worker1
があるpart files
とSUCCESS
、worker2
た_temporarty/task*/part*
各タスクは、一部のファイルが実行されました。
RUN2)は、worker1
一部のファイルとも持っている_temporary
ディレクトリを、worker2
持っていますmultiple part files
この動作は、なぜ誰も助けが私には理解できますか?1)私は、内のレコード考慮すべきであるoutputDir/_temporary
とともに、出力ファイルの一部としてではpart files in outputDir
?
2)は_temporary
DIRは、ジョブの実行後に削除されることになって移動part
にファイルをoutputDir
?
3)なぜそれが直接出力に含まdirの下の部分ファイルを作成することはできませんか?
coalesce(1)
そして、repartition(1)
outputDirのファイル自体が周りになりますので、オプションをすることはできません500GB
Spark 2.0.2. 2.1.3
そして Java 8, no HDFS
分析の後、私の火花ジョブが使用していることが観察fileoutputcommitter version 1
デフォルトです。私は使用するには、config含まfileoutputcommitter version 2
の代わりversion 1
とAWSで10ノードスパークスタンドアロンクラスタで試験しました。すべてのpart-* files
直下に生成されているoutputDirPath
に指定dataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath)
私たちは、プロパティを設定することができます
同じ含めることにより
--conf 'spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2'
中spark-submit command
またはsparkContextを使用してプロパティを設定します
javaSparkContext.hadoopConifiguration().set("mapreduce.fileoutputcommitter.algorithm.version","2")
概説されているよう私が失敗した場合の結果を理解して火花ドキュメントが、私は、所望の結果を達成しました!
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version、はdefaultValueが1つの
ファイル出力コミッターアルゴリズムバージョン、有効なアルゴリズムのバージョン番号:1または2バージョン2は、より良い性能を持っているかもしれませんが、バージョン1は、特定の状況で、より良い障害を処理することができる、などMapReduceの-4815あたり。