本文当作是自己的一个技术备份,如果有不对的地方,请大神不要喷。
cassandra 升级到了2.0.1 ,但是常用的Hector 客户端,到现在只是支持到了cassandra 1.2.5 的版本,所以暂时放弃了Hector,以待后面观察。
DATASTAX 把cassandra当作核心业务,并且支持了最新的cassandra版本,所以客户端选择了DATASTAX 的。
源代码:https://github.com/datastax/java-driver
大概看了一下这个客户端,就是把业务转换为cql,进行执行。
1.在服务器(192.168.3.141)上启动了一个单点的cassandra;(具体配置后续);
2.在cassandra中建立了 keyspace ,在keyspace中建立了 users CF。
3.在users中插入数据。
cqlsh:mykeyspace> SELECT * FROM mykeyspace.users ;
user_id | fname | lname
---------+-------+--------
1745 | john | smith
1744 | john | doe
1746 | john | smith2
(3 rows)
2.编写客户端进行查询;
Cluster cluster = Cluster.builder().addContactPoint("192.168.3.141").build();
Session session = cluster.connect("mykeyspace");
System.out.println("connected");
这时候连接报错:Exception in thread "main" com.datastax.driver.core.exceptions.NoHostAvailableException:
All host(s) tried for query failed (tried: [/192.168.3.141])
google了一下这个问题,但是解释都太对,所以查看了一下源代码;
this.clusterName = clusterName == null ? generateClusterName() : clusterName;
private static String generateClusterName() {
return "cluster" + CLUSTER_ID.incrementAndGet();
}
他这里用的集群的名字默认并不是cassandra给的默认 Test Cluster ,所以在这里设置一下集群的名字,网上有些说需要修改port为9042,这个不对,因为客户端默认就是9042.
Cluster cluster = Cluster.builder().withClusterName("Test Cluster").addContactPoint("192.168.3.141").build();
进行查询users表,并打印相关信息。
Cluster cluster = Cluster.builder().withClusterName("Test Cluster").addContactPoint("192.168.3.141").build();
Session session = cluster.connect("mykeyspace");
System.out.println("connected");
for (Row row : session.execute("SELECT * FROM users")) {
System.out.println(row.toString());
}
打印结果:
connected
Row[1745, john, smith]
Row[1744, john, doe]
Row[1746, john, smith2]
与插入数据的一致。