CSVへのスパークデータフレームの書き込みは、スタンドアロンクラスタモードで_temporaryディレクトリのファイルを作成します

Omkar:

私が実行しているspark job2つのワーカーノードを持つクラスタに!私は、ワーカーノードにCSVとして計算されたデータフレームを保存するための(スパークjavaの)以下のコードを使用しています。

dataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath); 私は火花が各ワーカーノード上で複数のパーツファイルを書き込む方法を理解しようとしています。

RUN1)worker1があるpart filesSUCCESSworker2_temporarty/task*/part*各タスクは、一部のファイルが実行されました。

RUN2)は、worker1一部のファイルとも持っている_temporaryディレクトリを、worker2持っていますmultiple part files

この動作は、なぜ誰も助けが私には理解できますか?1)私は、内のレコード考慮すべきであるoutputDir/_temporaryとともに、出力ファイルの一部としてではpart files in outputDir

2)は_temporaryDIRは、ジョブの実行後に削除されることになって移動partにファイルをoutputDir

3)なぜそれが直接出力に含まdirの下の部分ファイルを作成することはできませんか?

coalesce(1)そして、repartition(1)outputDirのファイル自体が周りになりますので、オプションをすることはできません500GB

Spark 2.0.2. 2.1.3 そして Java 8, no HDFS

Omkar:

分析の後、私の火花ジョブが使用していることが観察fileoutputcommitter version 1デフォルトです。私は使用するには、config含まfileoutputcommitter version 2の代わりversion 1とAWSで10ノードスパークスタンドアロンクラスタで試験しました。すべてのpart-* files直下に生成されているoutputDirPathに指定dataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath)

私たちは、プロパティを設定することができます

  1. 同じ含めることにより--conf 'spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2'spark-submit command

  2. またはsparkContextを使用してプロパティを設定します javaSparkContext.hadoopConifiguration().set("mapreduce.fileoutputcommitter.algorithm.version","2")

概説されているよう私が失敗した場合の結果を理解して火花ドキュメントが、私は、所望の結果を達成しました!

spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version、はdefaultValueが1つの
ファイル出力コミッターアルゴリズムバージョン、有効なアルゴリズムのバージョン番号:1または2バージョン2は、より良い性能を持っているかもしれませんが、バージョン1は、特定の状況で、より良い障害を処理することができる、などMapReduceの-4815あたり。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=168133&siteId=1
おすすめ