スパークのバージョン: 1.4.0 カサンドラのバージョン: 2.1.8
Spark と Cassandra の両方をブリッジするために、datastax Spark Cassandra コネクタを使用しています。6 つの異なるワーカーで実行されている Spark で 6 つのノードを使用しています。これを支援する 2 つの Cassandra ノードがあります。
列ファミリー (CassandraUtil.javaFunctions(sc).cassandraTable("keyspace","columnfamily").count()) 内の行数のカウントを実行するサンプル アプリケーションを試しました。
ここで、この 1 つのジョブをマスターにディスパッチすると、Spark クラスターの 2 つのワーカー ノードでジョブが実行されました (イベント タイムラインから取得)。
質問
- 私は単一の仕事を派遣しました。なぜ二人の作業員で行われたのですか?一人の労働者が主人のように振る舞うようなものですか?
- 1 人のワーカーで逆シリアル化時間が非常に長いことがわかりました。他のワーカーはかなり速く仕事を完了しました (1 人は 40 秒、2 人は 1 秒かかりました)。これに光を当てることができますか?
- どちらのワーカーも Cassandra との接続を確立したようで、結果を返しています。したがって、私の見解では、どちらも同じ仕事をしています。これに光を当てることができますか?
- Cassandra を使用したこの分散領域のどこに RDD の実装が適合するのか、私はまだ疑問に思っています。誰かがこれに光を当てることができますか? 複数のワーカーは、Cassandra のどのパーティションで作業する必要があるかをどのように知るのでしょうか? たとえば、6 つのワーカー間で 10,000 のパーティションを分割できる場合はどうすればよいでしょうか? フェッチはすべて1人のワーカーで行い、処理は6人で行うようなものですか?その場合でも、実行ロジックはすべてのワーカー (Cassandra からのフェッチとプロセス) で同じままです。Spark はこれをどのように行いますか?
- Cassandra で Spark を使用する本当の利点を知りたいです。それはメモリ管理レベルですか、それとも他の利点がありますか?
編集
走行中の写真を追加しました。10個の異なるパーティションがあります。これは単純なカウント操作です。
私の質問はまだパズルのままです。
添付ファイルをご覧いただければ、お分かりいただけると思います。これは、私のスパークマスターに送信された単一のジョブ用でした。2 つの異なるエグゼキュータでどのように動作するのか不思議です。両方のエグゼキュータが同じバイト数を返しています。つまり、どちらも cassandra から 10 個のパーティションすべてを取得したことがわかります。これが起こる方法である場合、spark は cassandra よりも何を提供してくれますか? または、10 個のパーティションが 2 つの異なるワーカーによってフェッチされるように、別の方法でフェッチする必要がありますか?