这两天一直在用YCSB。昨天还可以用的YCSB,今天在测试Cassandra时遇到问题了。
环境是在公用局域网的一台debian机器,YCSB和Cassandra都在这台机器上。异常是开始运行YCSB命令开始load后,一直没反馈,过了一段时间出现:
UnavailableException()
at org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:19487)
at org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:1035)
at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:1009)
at com.yahoo.ycsb.db.CassandraClient10.insert(CassandraClient10.java:477)
at com.yahoo.ycsb.DBWrapper.insert(DBWrapper.java:148)
at com.yahoo.ycsb.workloads.CoreWorkload.doInsert(CoreWorkload.java:461)
at com.yahoo.ycsb.ClientThread.run(Client.java:277)
且进行的operation只有2个或3个。其实该节点是一直没问题的,还可以远程用代码连接。
弄了一段时间后,通过启动日志发现是由于一个局域网内有其他cassandra节点,且在用了同一个“cluster_name”,由于
gossip协议,这些节点之间连起来了...之前可以用是因为用的是cassandra自带的cassandra.yaml文件,后来我为了远程连接,
把listen_address:
localhost改成了该节点的ip,导致其他节点可以与该节点互联,影响了YCSB的测试。改回localhost后重启cassandra,再将
data_file_directories、commitlog_directory和saved_caches_directory清空,再运行
YCSB又成功了。