2014-07-18 37 views
1

的設置:NoHostAvailableException與卡桑德拉1000併發請求與DataStax Java驅動程序

-2-節點卡桑德拉2.0.7.31簇
-replicas = 1
- 帶有默認配置
- 使用DataStax的java駕駛員1.0

活動 簡單插入查詢使用QueyBuilder類

結果

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered)) 
      at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:64) 
      at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214) 
      at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169) 
      at com.jpmc.es.rtm.storage.impl.EventExtract.main(EventExtract.java:36) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:601) 
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered)) 
      at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:98) 
      at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:165) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
+0

你能否使用cassandra-cli連接到cassandra服務器? –

+0

是的。我爲每1000個併發命中獲得85 TPS。但是我對卡桑德拉對TPS有更多的期待。我很困惑的是,datastax驅動程序正在放慢整個事情? – Sarkar

回答

1

問題是,在我的最後,我創建了一個線程一個連接模型。這是非常同步的。但Datstax驅動程序異步工作(它使用netty,我猜),並採取單一連接多個請求。所以在我的情況下,我爲每個請求一個會話,並猜測什麼?我已經離開了開放連接B/W Driver和Cassandra。服務器被阻塞了,驅動程序也是如此。簡單地通過讓Driver管理其池來解決問題。

默認情況下,Datastax java驅動程序保持最小連接數量以處理某些數量的同時請求。
Spec說,驅動程序在每個連接上最多處理128個請求時會受到限制.so當我們的驅動程序發現超過128個請求即將到來時,它只會打開連接。所以Driver是精美的管理連接池。[http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/PoolingOptions.html]此鏈接很有幫助

0

轉到您cassandra.yaml文件。它將出現在cassandra安裝的conf文件夾中。

對於listen_address給出cassandra服務器的IP地址。例如。

listen_address: 10.181.13.239 

然後重新啓動cassandra服務器。另外檢查本地運輸的端口是不是評論。應該有一個條目,如

native_transport_port: 9042 
+0

嗨約翰感謝您的回覆,但。它的工作良好,可達1000客戶端或更少。 – Sarkar

+0

其實我想在Cassandra上執行一個基準。我正在嘗試配置Cassandra,這樣它可以給我很好的TPS。我使用dataStax java驅動程序作爲客戶端。 – Sarkar

+0

我正在使用類似的環境,並且可以使用更復雜的事務輕鬆達到> 10,000 TPS。你應該檢查你的Cassandra實例的CPU和內存使用情況,看看你是否遇到了問題。此外,'Datastax驅動程序'已經在2.0.3版本,我會認真考慮升級。 – Baldy