4

Sparkジョブを使用して Cassandra 操作 (2 つのテーブルでのバッチ実行 - 挿入操作と更新操作) を実行しているときに、「すべてのホストがクエリに失敗しました - com.datastax.driver.core.OperationTimedOutException」エラーが発生します。

クラスター情報:
Cassandra 2.1.8.621 | DSE 4.7.1
spark-cassandra-connector-java_2.10 バージョン - 1.2.0-rc1 | cassandra-driver-core バージョン - 2.1.7
Spark 1.2.1 | Hadoop 2.7.1 => 3 ノード
Cassandra 2.1.8 => 5 ノード
各ノードには 28 GB のメモリと 24 のコアがあります

その解決策を探しているときに、BATCHES を使用しないでくださいといういくつかの議論に出くわしました。このエラーの根本的な原因を見つけたいと思います。また、 "SocketOptions. setReadTimeout" を設定/取得する方法と場所を教えてください。このタイムアウト制限は、標準ガイドラインに従って Cassandra リクエストのタイムアウトよりも大きくする必要があり、エラーの可能性を回避するためです。 .

request_timeout_in_ms と SocketOptions です。setReadTimeout 同じですか?誰でもこれを手伝ってくれますか?

4

1 に答える 1

7

Spark ジョブを使用して Cassandra 操作 (バッチ実行 - 2 つのテーブルに対する挿入操作と更新操作) を実行しているときに、「すべてのホストがクエリに失敗しました - com.datastax.driver.core.OperationTimedOutException」エラーが発生します。

ドキュメントから直接:

書き込みタスクがタイムアウト/失敗するのはなぜですか?

これの最も一般的な原因は、Spark が Cassandra が処理できるよりもはるかに速く書き込み要求を発行できることです。これにより、GC の問題が発生し、ヒントが蓄積される可能性があります。これがアプリケーションに当てはまる場合は、次のオプションを使用して、同時書き込み数と現在のバッチ サイズを減らしてみてください。

spark.cassandra.output.batch.size.rows spark.cassandra.output.concurrent.writes

または 1.2.0 セット以上の Spark Cassandra コネクタのバージョン

spark.cassandra.output.throughput_mb_per_sec

これにより、1 秒あたりの Spark コアごとに C* に書き込まれるデータの量を制御できます。

BATCHES を使用しないでください

これは常に正しいとは限りません。コネクタはローカル トークン対応のバッチを使用して読み取りと書き込みを高速化しますが、カスタム アプリでこれを正しく行うのは困難です。多くの場合、非同期クエリの方が優れているか、または同等に優れています。

setReadTimeout

これは DataStax Java ドライバーメソッドです。これはコネクタによって自動的に処理されるため、変更する必要はありません。

于 2015-09-10T16:14:05.807 に答える