2016-11-27 7 views
0

私は分散コンピューティングが初めてで、Sparkのmllib kmeansを使用してEC2でKmeansを実行しようとしています。私は、チュートリアルを読んでいたとして、私は、私は、このコードは、クラスタ内で実行されます方法を理解するトラブルを抱えています http://spark.apache.org/docs/latest/mllib-clustering.html#k-means enter image description heremllibコードはsparkでどのように動作しますか?

に次のコードスニペットを見つけました。具体的には、私は次のことを理解し、トラブルを抱えている:

  1. ノードをマスターするためのコードを提出した後、どのようにスパークは、ジョブを並列化する方法を知っていますか?これを扱うコードの部分がないように見えるからです。

  2. コードはすべてのノードにコピーされ、各ノードで実行されますか?マスターノードは計算を行いますか?

  3. ノードはどのように各繰り返しの部分的な結果を共有しますか?これはkmeans.trainコードの中で処理されていますか、またはスパークコアが自動的に処理しますか?

答えて

1
  1. スパークは、多くのパーティションにデータを分割します。たとえば、HDFSからファイルを読み込む場合、パーティションはHDFSでのデータのパーティション分割と同じでなければなりません。手動でパーティション数を指定するには、repartition(numberOfPartitions)を実行します。各パーティションは、別々のノード、スレッドなどで処理することができます。データは、データのハッシュを調べるHashPartitionerによってパーティション化されることがあります。

パーティションの数とパーティションのサイズは、データが正しく分散/並列化されているかどうかを一般的に示します。データのパーティションを作成する方法は、RDD.getPartitionsのメソッドでは隠されています。

リソーススケジューリングは、クラスタマネージャによって異なります。私たちは非常に長い投稿を掲示することができます;)私はこの質問では、分割が最も重要だと思います。そうでない場合は、私に知らせてください、私は答えを編集します。

  1. Sparkは、変換とアクションの引数として与えられるclusuresを直列化します。 SparkはDAGを作成します。DAGはすべてのエグゼキュータに送信され、エグゼキュータはデータ上でこのDAGを実行します。各DAGは各パーティションで終了します。

  2. 現在、各繰り返しの後、データがドライバに戻され、次のジョブがスケジュールされます。 Drizzleプロジェクトでは、AMPLab/RISELabは一度に複数のジョブを作成できる可能性があるため、データはドライバに送信されません。 DAGを1回作成し、10回の繰り返しでジョブをスケジュールします。それらの間のシャッフルは制限されます/全く存在しません。現在、DAGは、各反復で作成され、ジョブに執行

に予定されているスパークでのリソーススケジューリングとスパーク霧雨程度presentation非常に役立つがあります。

+0

申し訳ありませんが、私はいずれの点でも不正確です。誰かが何かエラーを見たら、私に電話してください - 私はできるだけ簡単に説明しようとしました。おそらくあまりにも不正確かもしれません。 –

関連する問題