0

ジョブをスパーク マスターにトリガーするアプリケーションがあります。しかし、ジョブを実行している 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 から再度フェッチしてカウントを処理しますか?

誰かがこれを明確にできますか??

編集

  1. 提供された回答によると、カウント呼び出しがワーカーの機能をトリガーする場合、ローカルでRDDを作成するexecuteSQLの使用は何ですか? クエリを実行して、データの Cassandra データセットを作成しますか? その場合、Cassandra からのクエリは 2 回行われますか?

2. Spark が Cassandra の 10 パーティションの計算を 4 つのワーカーに自動的に分散する場合、誰が結果を集計しますか? マスターは配信をしているだけです。それで、それも集約されますか?

  1. RDD をキャッシュせずに別のカウント操作を行うとどうなりますか? Spark は、特定のパーティションに対して以前に使用されたのと同じワーカーを使用しようとし、そのノードの結果の RDD に追加しようとします。このパーティション データを再度取得するには、Cassandra にクエリを実行する必要があると思いますか? これについて明確に説明できますか?

  2. RDD をキャッシュするとどうなりますか? RDD はワーカーに格納され、すべての操作に使用されますか? その場合、データセットをメモリに保存して処理するのとどう違うのでしょうか? これについても権利があるかどうか教えてください。

4

1 に答える 1

3

CQL コマンドなどの RDD の Spark の読み込みと変換は、遅延評価されます。

アクションはすべての前駆体変換の実行をトリガーするため、この例では count() がアクションです。

Spark が内部で機能する方法は、変換のグラフを構築することです。アクションを実行する必要がある場合、個々のワーカーが実行できる個別のサブタスクにグラフを分割します。

count() のような単一のアクションを実行するために、データは Cassandra から 1 回だけフェッチされ、可能であれば、各エグゼキューターの RDD は、各 Cassandra ノードにローカルなデータから取り込まれます。

q から作成された RDD で別のアクションを実行すると、メモリにキャッシュされたままになる可能性があり、再利用されます。RDD を再利用する予定がある場合は、RDD をメモリにキャッシュすることを明示的に要求するために作成できる API 呼び出しがあります。

于 2015-07-22T16:59:22.090 に答える