3

Spark/Spark Cassandra Connector は初めてです。チームで初めてスパークを試しており、スパーク cassandra コネクタを使用して cassandra データベースに接続しています。

データベースの重いテーブルを使用するクエリを作成しましたが、テーブルへのクエリがすべてのレコードをフェッチするまで Spark タスクが開始されないことがわかりました。

データベースからすべてのレコードを取得するだけで 3 時間以上かかります。

使用するDBからデータを取得します。

  CassandraJavaUtil.javaFunctions(sparkContextManager.getJavaSparkContext(SOURCE).sc())
    .cassandraTable(keyspaceName, tableName);

すべてのデータのダウンロードが完了していなくても、spark に作業を開始するように指示する方法はありますか?

fetch により多くのスレッドを使用するように spark-cassandra-connector に指示するオプションはありますか?

ありがとう、ココ。

4

1 に答える 1

3

Spark UI を見ると、テーブル スキャンが作成しているパーティションの数は? このようなことをしたところ、Spark がスキャン用に作成するパーティションが多すぎて、結果として時間がかかっていることがわかりました。仕事の時間を短縮する方法は、構成パラメーターspark.cassandra.input.split.size_in_mbをデフォルトよりも高い値に設定することでした。私の場合、20 分の作業が約 4 分に短縮されました。ここには、設定できる Cassandra 読み取り固有の Spark 変数がさらにいくつかあります。これらのスタックオーバーフローの質問は、私が最初に参照したものです。同様に役立つことを願っています。

小さなチャンクで大規模な Cassandra テーブルを反復処理する

Cassandra テーブル スキャンのタスク数を設定する

編集:

いくつかの Spark 構成パラメーターをいじることに関していくつかのパフォーマンス テストを行った後、Spark エグゼキューターに十分なメモリを与えていないときに、Spark が非常に多くのテーブル パーティションを作成していることがわかりました。私の場合、メモリをギガバイト単位で増やすだけで、入力分割サイズ パラメータが不要になります。エグゼキュータにより多くのメモリを与えることができない場合でもspark.cassandra.input.split.size_in_mb、回避策としてより多くのメモリを設定する必要がある場合があります。

于 2015-08-05T21:29:57.667 に答える