ジョブをスパーク マスターにトリガーするアプリケーションがあります。しかし、ジョブを実行している IP アドレスを確認すると、spark ワーカー IP ではなく、アプリケーション IP が表示されます。したがって、私が理解していることから、RDD を呼び出すと、動作する Spark ワーカーが生成されます。
しかし、私の質問はこれです。
CassandraSQLContext c = new CassandraSQLContext(sc);
QueryExecution q=c.executeSql(cqlCommand); //-----1
q.toRDD().count(); //----2
ワーカーが 2 に対して何かをしているのに、1 に対しては何もしていないのを見ました。
これは、Cassandra からのフェッチと、そこからの RDD の作成がすべてアプリケーションで行われることを意味するのでしょうか?
その場合、2 は 2 つのワーカーに対してジョブをトリガーします。その場合、Cassandra から再度フェッチしてカウントを処理しますか?
誰かがこれを明確にできますか??
編集
- 提供された回答によると、カウント呼び出しがワーカーの機能をトリガーする場合、ローカルでRDDを作成するexecuteSQLの使用は何ですか? クエリを実行して、データの Cassandra データセットを作成しますか? その場合、Cassandra からのクエリは 2 回行われますか?
2. Spark が Cassandra の 10 パーティションの計算を 4 つのワーカーに自動的に分散する場合、誰が結果を集計しますか? マスターは配信をしているだけです。それで、それも集約されますか?
RDD をキャッシュせずに別のカウント操作を行うとどうなりますか? Spark は、特定のパーティションに対して以前に使用されたのと同じワーカーを使用しようとし、そのノードの結果の RDD に追加しようとします。このパーティション データを再度取得するには、Cassandra にクエリを実行する必要があると思いますか? これについて明確に説明できますか?
RDD をキャッシュするとどうなりますか? RDD はワーカーに格納され、すべての操作に使用されますか? その場合、データセットをメモリに保存して処理するのとどう違うのでしょうか? これについても権利があるかどうか教えてください。