ZooKeeperListener
位置:org.apache.hadoop.hbase.zookeeper
该类是一个抽象类,是对ZooKeeper事件监听的基类。
一个过程的的观察者(一般为ZookeeperWatcher类型)会根据事件的不同执行该类中对应的方法。
一个ZookeeperListener类型的实例,需要通过ZookeeperWatcher#registerListener来讲自己注册到观察者列表中去,之后才能够接收到观察者监听到的事件。
该类的方法执行过程不能太长,因为执行过程对观察者类是阻塞的。
RecoveringRegionWatcher
位置: org.apache.hadoop.hbase.zookeeper
该类是上述监听者基类的实现类。主要实现了nodeDeleted方法和registerWatcher方法。
对于nodeDeleted方法的实现这里不做过多解释。后续在HBase集群运作的具体流程分析中再进行解释。
ZooKeeperWatcher
位置:org.apache.hadoop.hbase.zookeeper
该类是Master,RegionServer以及客户端进程中的唯一观察者实例,在每个进程中实例化一次。
该类是Hbase中唯一一个实现了org.apache.zookeeper接口的类,其他需要获取到Zookeeper事件通知的类必须ZooKeeperWatcher实例注册自己。
这个类也持有和管理Zookeeper连接,与连接相关的事件和异常处理代码都在这个类里面。
类简单介绍:
- 该类持有一个RecoverableZooKeeper类实例,通过该实例,对Zookeeper进行相关操作。
- setNodeNames()方法,根据配置设置Zookeeper节点名称
- createBaseZNodes方法创建了基本的Zookeeper节点。
- registerListener方法添加Zookeeper监听者。
- process方法。重写方法,处理Zookeeper事件。该方法根据事件类型调用监听者列表实例中每个实例对应的时间类型处理方法。
ZKUtil
位置:org.apache.hadoop.hbase.zookeeper
该类是HBase内部工具类,仅仅包含静态方法和变量。
这个类的所有方法都会抛出一个KeeperException,所有调用这些方法的程序都要对此异常作出处理。
RecoverableZooKeeper
位置:org.apache.hadoop.hbase.zookeeper
该类持有一个Zookeeper实例,并处理一些可恢复的错误。
为了处理可恢复的错误,开发者必须明白,有两类请求,幂等的和非幂等的请求,读请求和无条件的赋值删除请求是幂等的,他们的执行结果是相同的。
该类的一些解释:
- 实际的Zookeeper客户端实例。
- 当前进程的标志字符串。
- Zookeeper观察者实例。
- 其他。
- checkZk方法,该方法创建Zookeeper客户端实例。
- 该类持有了对Zookeeper进行增删改查的方法。
后记
这里是对HBase1.2.1源代码中Zookeeper相关的核心代码的初步汇总,后续会有更进一步的分析整理,期待更简明扼要的分享呈现给大家。