1

サイズが 500MB の列がほとんどない単一の行を cassandra クラスターに挿入しようとしていますが、エラーが発生しています。

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: [/10.138.90.207:9042, /10.138.90.208:9042, /10.138.90.191:9042, /10.138.90.240:9042, /10.138.90.232:9042, /10.138.90.205:9042, /10.138.90.236:9042, /10.138.90.246:9042] - use getErrors() for details)
at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:65)
at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:256)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:172)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:52)
at com.tcs.asml.cassandra.Crud.Insert(Crud.java:44)
at com.tcs.asml.factory.PartToolInsert.main(PartToolInsert.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: [/10.138.90.207:9042, /10.138.90.208:9042, /10.138.90.191:9042, /10.138.90.240:9042, /10.138.90.232:9042, /10.138.90.205:9042, /10.138.90.236:9042, /10.138.90.246:9042] - use getErrors() for details)
at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:103)
at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:175)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

get errors in exception を出力すると、クラスター内のすべてのノードの読み取りエラー中にタイムアウトが表示されます。

Get errors: 
{/10.138.90.207:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.191:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.208:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.240:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.232:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.205:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.236:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read, /10.138.90.246:9042=com.datastax.driver.core.exceptions.DriverException: Timeout during read}

クラスターの詳細:

  • それぞれ 16 GB RAM の 8 ノードを備えた 1 つのデータセンター
  • すべてのノードに単一のハードディスク。
  • すべてのノードは、デフォルトのレイテンシで 10 mbps の帯域幅で接続されています。

以下のコマンドを使用して、読み取りタイムアウトを増やしてみました。

cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(60000);

以下は、現在使用している yaml 構成です。

  • memtable 総容量: 4Gb
  • コミット ログ セグメント サイズ: 512MB
  • read_request_timeout_in_ms (ミリ秒): 10000
  • request_timeout_in_ms (ミリ秒): 10000
  • 同時読み取り: 32
  • 同時書き込み: 32

250MBの行を挿入しようとしているときに同じ問題に直面し、読み取りタイムアウトを30秒に設定することで問題を修正しました。

cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(30000);

しかし、500MB の行サイズでは機能しません。

巨大なデータを含む単一の行を挿入するようにcassandraを調整する方法を教えてください。

ありがとう。

4

1 に答える 1