2012-05-11 55 views
3

我有以下代碼:如何使用Hector重新連接到Cassandra?

StringSerializer ss = StringSerializer.get(); 
String cf = "TEST"; 
CassandraHostConfigurator conf = new CassandraHostConfigurator("localhost:9160"); 
conf.setCassandraThriftSocketTimeout(40000); 
conf.setExhaustedPolicy(ExhaustedPolicy.WHEN_EXHAUSTED_BLOCK); 
conf.setRetryDownedHostsDelayInSeconds(5); 
conf.setRetryDownedHostsQueueSize(128); 
conf.setRetryDownedHosts(true); 
conf.setLoadBalancingPolicy(new LeastActiveBalancingPolicy()); 
String key = Long.toString(System.currentTimeMillis()); 
Cluster cluster = HFactory.getOrCreateCluster("TestCluster", conf); 
Keyspace keyspace = HFactory.createKeyspace("TestCluster", cluster); 
Mutator<String> mutator = HFactory.createMutator(keyspace, StringSerializer.get()); int count = 0; 
while (!"q".equals(new Scanner(System.in).next())) { 
    try{ 
     mutator.insert(key, cf, HFactory.createColumn("column_" + count, "v_" + count, ss, ss)); 
    count++; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

,我可以寫使用它的一些價值,但是當我重新啓動卡桑德拉,它失敗。這裏是日誌:

[15時11分07秒] INFO [CassandraHostRetryService]倒地主機重試服務開始使用>隊列大小128和重試延遲5S [15時11分07秒] INFO [JmxMonitor]註冊JMX > me.prettyprint.cassandra.service_ASG:ServiceType = hector,MonitorType = hector [15:11:17] ERROR [HThriftClient]無法在客戶端關閉時刷新傳輸(預計會發生關閉):CassandraClient org.apache.thrift.transport.TTransportException:java.net.SocketException:損壞的管道 at> org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:147) at org.apache.thrift.transport。 TFramedTransport.flush(TFramedTransport.java:15 6) at> me.prettyprint.cassandra.connection.client.HThriftClient.close(HThriftClient.java:98) at> me.prettyprint.cassandra.connection.client.HThriftClient.close(HThriftClient.java:26) at > me.prettyprint.cassandra.connection.HConnectionManager.closeClient(HConnectionManager.java:308) at> me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:257) at> me.prettyprint.cassandra.model .ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97) at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl.java:243) at me.prettyprint.cassandra.model.MutatorImpl.insert(MutatorImpl.java:69 ) at com.app.App.main(App.java:40) 原因:java.net.SocketExcep重刑:在java.net.SocketOutputStream.write(SocketOutputStream.java:153)在java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) 在java.net.SocketOutputStream.socketWrite0(本機方法) 中斷的管道 at> org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:145) ... 9更多 [15:11:17] ERROR [HConnectionManager] MARK HOST AS DOWN TRIGGERED for host> localhost(127.0。 0.1):9160 [15:11:17]錯誤[HConnectionManager]關閉時的池狀態:>:{localhost(127.0.0.1):9160}; IsActive?:真的;活動:1;阻止:0;空閒:15; NumBeforeExhausted:49 [15:11:17] INFO [ConcurrentHClientPool]關閉時觸發:{localhost(127.0.0.1):9160} [15:11:17] INFO [ConcurrentHClientPool]關閉完成:{localhost(127.0。 0.1):9160} [15:11:17] INFO [CassandraHostRetryService]主機檢測爲關閉重試隊列:localhost(127.0.0.1):9160 [15:11:17]警告[HConnectionManager]無法滿足該主機的請求CassandraClient [15:11:17] WARN [HConnectionManager]異常: me.prettyprint.hector.api.exceptions.HectorTransportException:org.apache.thrift.transport.TTransportException:java.net.SocketException:管道損壞 at> me.prettyprint.cassandra.connection.client.HThriftClient.getCassandra(HThriftClient.java:82) at> me.prettyprint.cass andra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:236) at> me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97) at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl .java:243) at me.prettyprint.cassandra.model.MutatorImpl.insert(MutatorImpl.java:69) at com.app.App.main(App.java:40) 引起:org.apache.thrift .transport.TTransportException:java.net.SocketException:管道損壞 at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport。Java的:147) 在org.apache.thrift.transport.TFramedTransport.flush(TFramedTransport.java:157) 在org.apache.cassandra.thrift.Cassandra $ Client.send_set_keyspace(Cassandra.java:466) 的組織。 apache.cassandra.thrift.Cassandra $ Client.set_keyspace(Cassandra.java:455) at> me.prettyprint.cassandra.connection.client.HThriftClient.getCassandra(HThriftClient.java:78) ... 5更多 引起:java.net.SocketException:斷開管道 at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream。 java:153) at> org.apache.thrift.transport.TIOStreamTransport.write(TI OStreamTransport.java:145) ... 9更多 [15:11:17]信息[HConnectionManager]客戶端CassandraClient發佈到非活動或死亡池。關閉。 [15:11:17]信息[HConnectionManager]客戶端CassandraClient發佈到不活動或死亡的池中。關閉。 [十五時11分17秒] INFO [HConnectionManager]新增主機本地主機(127.0.0.1):9160彙集

+0

我的thrift_max_message_length_in_mb = 16,cassandra 1.0.7,hector 1.0-2和我等了不止5秒,但它仍然不起作用。 – Dev

+0

問題在於hector的版本。與1.0-5它工作正常。 – Dev

回答

2

您已設置 -

conf.setRetryDownedHostsDelayInSeconds(5); 

嘗試在重新啓動後等待更多比5秒鐘。 另外,您可能需要升級。

什麼是大小thrift_max_message_length_in_mb你已經設置?

親切的問候。