Phoenix是以JDBC驱动方式嵌入到HBase,在部署时只有一个包,直接放在HBase的lib目录下。每个RegionServer节点上,都会有一个Phoenix协处理器来处理每个表、每个Region的数据,应用端通过Phoenix客户端与HBase客户端打交道,从而实现Sql化访问HBase数据。
Phoenix实现原理
Phoenix的SQL实现原理主要基于一系列的Scan操作完成,Scan是HBase的批量扫描。这一系列的Scan操作分散到各台RegionServer上通过Coprocessor来完成。主要用到的是RegionObserver,通过RegionObserver在postScannerOpen Hook中将RegionScanner替换成支持聚合操作的定制化Scanner,在真正执行聚合时,会通过自定的Scan属性传递给RegionScanner,在这个Scan中也可加入一些过滤规则,尽量减少返回Client的结果。
特点
支持二级索引
支持标准SQL,可以使HBase具有更加灵活处理复杂事务能力
编译SQL为并行执行的查询任务
Skip Scan提高扫描速度