日期:2014-05-16  浏览次数:20518 次

Hector 配置
Cassandra 客户端 Hector介绍
Hector:Java Cassandra 客户端,对thrift做了简单封装。支持Failover、pooling、JMX。
Hector当前最新版本hector-0.7.0-16.zip,
Hector源码下载(前提安装了git客户端),在命令行输入git命令:
git clone http://github.com/rantav/hector.git ./hector0.7.0-16
下载apache-cassandra-0.6.4-src源码,会发现包org.apache.cassandra.thrift有部分代码没有。没关系,可以在apache-cassandra-0.6.4-src\interface\thrift\gen-java这个文件夹下找到。
1. Hector连接一个节点
    Hector 客户端连接Cassandra节点
    新建一个空的CassandraClientPool
CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
    往CassandraClientPool添加Cassandra节点CassandraHost.
例如:
CassandraHost cassandraHost1 = new CassandraHost(”hadoop1″, 9160); pool.addCassandraHost(cassandraHost1);
CassandraHost cassandraHost2 = new CassandraHost(”hadoop2″, 9160);
pool.addCassandraHost(cassandraHost2);
    从连接池获得一个CassandraClient
CassandraClient client = pool.borrowClient();
得到一个有效的client就可以操作Keyspace了。
例子代码可以参考me.prettyprint.cassandra.examples包。
2. Hector中的几个对象
? 集群-Cluster
cluster是Hector客户端对cassandra服务器集群的抽象(可以想象一下虚拟机的原理,把物理设备抽象成一个对象,包括一系列属性和操作),包含集群中每个节点(CassandraHost)的信息。节点的信息在cluster初始化的时候注册进去。
在使用hector时,Cluster通常作为程序的一个主要入口。首先获取或者创建一个cluster,然后再用keyspaceOperator去操作keyspace。
? 节点-CassandraHost
一个CassandraHost实例对应cassandra cluster中的一个节点。
它做了两件事情:一是封装了连接一个节点的必需信息,二是注册了该节点连接池(CassandraClientPoolByHost)配置信息。
必需的连接信息包括节点的ip或者主机名、端口、超时时间等。
连接池配置信息包括最大活跃连接数(默认为50)、最大闲置链接数(默认为5个)、连接资源耗尽时最大等待时间(默认行为是阻塞)等,同时提供一个资源耗尽策略。
资源耗尽策略有3种:1、连接耗尽时fail并抛出异常;2、连接耗尽时再创建一个连接;3、连接耗尽时阻塞直到有可用连接。默认是资源耗尽策略是2再创建一个连接。内部连接池的实现原理可以看一下org.apache.commons.pool.impl.GenericObjectPool。

? 节点连接池-CassandraClientPool:一个cluster中所有节点的连接由一个CassandraClientPool来负责管理。 CassandraClientPool可以看成是一个简单的在不同CassandraClientPoolByHost连接池之间的多路转换器。节点池CassandraClientPool hold所有可用的CassandraClientPoolByHost连接池,而且keyed by url:port。因此在CassandraClientPool中获取一个CassandraClientPoolByHost的方法可以通过by url and port。
? 单个节点的连接池-CassandraClientPoolByHost
A cassandra client pool per one cassandra host。
CassandraClientPoolByHost可以看作是一个管理一台cassandrahost连接的连接池。CassandraClientPoolByHost最大活跃连接数默认为50,最大闲置链接数默认为5个,连接资源耗尽时默认行为是阻塞。这些值最终取决于CassandraHost的配置。
? 客户端-CassandraClient
CassandraClient对象对远程cassandra 服务来说是一个high level handle,它建立一个跟CassandraHost的链接。通过client可以获得一个Keyspace.keyspace 可以让你对远程的 cassandra进行读写操作。
? Keyspace
Keyspace 对cassandra所有的读写操作来说是一个high level handle,它可以操作具体的column。Keyspace不是线程安全的,用的时候一个线程一个Keyspace。(PS:线程安全的本质是保护数据,如果在读取过程中不发生修改任何数据的话,那么纯读取操作可以不用care)。
Keyspace执行失败会执行Failover操作。FailoverPolicy有三种:1、fail时直接返回异常;2、fail时再尝试下一个节点(再剩下的节点里随机选一个);3、失败时尝试所有节点。默认策略是fail时尝试所有节点.