2017-01-25 10 views
1

私はSparkの初心者ですが、私はSparkの動作について少し混乱しています。Sparkは並列処理が不十分なタスクを実行します

val fichero = sc.textFile(file, numPartitions) 

私は12人の労働者と216を持つクラスタの下で開発しています:

私はこの方法で私は、このようにユーザーが指定したパーティションの数とRDDを作成し、Scalaではアルゴリズムを開発しています使用可能なコア数(ノードあたり18個)。私は、アプリケーションをデバッグするためにスパークUIに行くときしかし、私は与えられた舞台のために次のイベントのタイムラインを見た:画像の品質について

Spark Event TimeLine of a stage

申し訳ありませんが、私は低ズームにたくさんあります。この実行には、128のパーティションがあります。しかし、画像で見られるように、RDD全体は12人のエグゼキュータのうち2人でしか実行されないため、いくつかのタスクは順番に実行され、その動作を望んでいません。

ここで問題が起こっていますか?各タスクを並行して実行するためにすべてのワーカーを使用できますか?私はオプション見てきました:

spark.default.parallelism

をしかし使用するパーティションの数を選択するとき、このオプションが変更されます。 spark-submitスクリプトのdefaultsパラメータを使ってアプリケーションを起動します。

+0

でパーティションの実際の数を確認することができますか? – FaigB

+0

spark submitでオプション '--num-executors'と' --executor-cores'を試しましたか? –

+0

spark-submitで--num-executorsを12に設定しても機能しません。 2人のエグゼキュータを使っています。私はスタンドアロンモードでスパークを使用しています。 –

答えて

1

--num-executorsを高い数値に設定する必要があります(デフォルトは2)。--executor-coresもデフォルトで1に設定する必要があります。試してみてください--num-executors 128

パーティションの数が「エグゼキュータの数と実行者のコアの数を掛けた数」の倍数(通常は必要なリソースに応じて2または4を使用します)であることを確認してください。

spark-submit --help参照し、さらに読書のために、私は(特に「チューニング並列処理」)これを見て持ってお勧めすることができます:http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

+0

私は良い結果を出して異なる数のエグゼキュータで証明していたので、このソリューションはうまくいくと思います。しかし、私のデータのサイズは、クラスタ上のすべての物理ノードに送信するのに十分な大きさではありません。しかし、 - executorソリューションが機能します。ありがとう! –

関連する問題