2017-01-26 12 views
-1

私はsparkで大きなデータを処理し、HDFSに保存しました。sparkでsaveAsTextFileメソッドのパフォーマンスを向上させる方法はありますか

しかし、私はsaveAsTextFileメソッドがやや遅いと感じています。

パフォーマンスを向上させる方法があるのだろうかと思います。

(予想よりも遅い実行されている)私の元のコード

val data = sc.textFile("data", 200); 
data. 
    flatMap(_.split(" ")). 
    map(word => (word, 1)). 
    reduceByKey(_ + _). 
    saveAsTextFile("output") 

は私が合体を追加し(1)、速度が劇的に

val data = sc.textFile("data", 200); 
data. 
    flatMap(_.split(" ")). 
    map(word => (word, 1)). 
    reduceByKey(_ + _). 
    coalesce(1). 
    saveAsTextFile("output") 
+1

私はあなたの仕事のsparkマスターページをチェックすることをお勧めします、それは仕事のさまざまな部分のタイミングについて多くの詳細があります。おそらく、hdfsに書き込んでいるファイルとサイズの数もチェックしたいと思うでしょう。例えば、たくさんの小さなファイルを書くかもしれません。 – jeff

+0

お返事ありがとう! もう一度質問に回答できますか?あなたが気にしないのなら。 'sc.textFile()'を使ってテキストファイルをロードするとき、私はこのメソッドのパーティショニングパラメータを200に設定します。これは "あなたがたくさんの小さなファイルを書いているかもしれません"という意味ですか? –

+0

plsはあなたが試したコードを追加します。 – mrsrinivas

答えて

1

を改善し、私はあなたの仕事はゆっくりとB実行されている推測しています/ cあなたはあなたの入力の200のパーティションを求めています。出力をHDFSに書き込むと、HDFSに200個(おそらくは小さい)のファイルが書き込まれます。 1に合体すると速度が上がります。

textFileの200個のパーティションを削除し、Sparkにデフォルトの並列処理を選択させることをお勧めします。

ジョブの最後に書き出されたファイルサイズにも注意してください。 HDFSは、ファイルサイズがブロックサイズに近いときに最も効果的です(私はデフォルトを覚えていませんが、約256Mと思います)。

Sparkがパーティションごとにセットアップ/ティアダウンを行うため、パーティションが遅くなる可能性があるもう一つの理由があります。これらの数字を設定するにはスィートスポットがあります。あなたのスパークマスターを見てください。実際の作業の5msのセットアップ/ティアダウンが100msあれば、必要なパーティションは少なくて済みます。

私はいつもスパーク設定をデフォルトにして、必要に応じて調整します。

+0

あなたの返信ありがとう! –

関連する問題