1. 程式人生 > >HBase-6.hbase 協處理器

HBase-6.hbase 協處理器


引入Hbase中的Coprocessor的原因
HBase作為列族資料庫無法建立“二級索引”,難以執行求和、計數、排序等操作。為解決這些問題,HBase0.92 之後引入協處理器(Coprocessor),實現一些新特性,能夠輕易建立二次索引、複雜過濾器、以及訪問控制。


參考: http://blog.csdn.net/lifuxiangcaohui/article/details/39991183
協處理器兩個外掛

(1)觀察者(observer)

提供三種觀察者介面:
RegionObserver:提供客戶端的資料操縱事件鉤子:Get、Put、Delete、Scan等。
WALObserver:提供WAL相關操作鉤子。

MasterObserver:提供DDL-型別的操作鉤子。如建立、刪除、修改資料表等。



(2)終端(endpoint)

EndPoint協處理器
(1)ObServer協處理器:允許叢集在正常的客戶端操作過程中可以有不同的行表現!
(2)EndPoint協處理器:允許你擴充套件叢集能力,對客戶端應用開放新的執行命令,在RegionServer上執行

HBase的協處理器(coprocessor)統計函式
(1)在使用HBase的協處理器(coprocessor)之前,需要啟動協處理器,有兩種方案。
方案1:啟動全域性aggregation,能過操縱所有的表上的資料。通過修改hbase-site.xml這個檔案來實現

<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
</property>


方案2:啟用表aggregation,只對特定的表生效。通過HBase Shell 來實現
create 'stu', {NAME => 'info', VERSIONS => 5}
1、disable指定表。
hbase> disable 'stu'

2、新增aggregation 
hbase>alter 'stu', METHOD => 'table_att','coprocessor'=>'|org.apache.hadoop.hbase.coprocessor.AggregateImplementation||'
3、重啟指定表 
hbase> enable 'stu'


(2) JAVA程式碼統計表中列族的行數

public class MyAggregationClient {


public static void main(String[] args) throws Throwable {
Configuration customConf = new Configuration();
customConf.set("hbase.rootdir", "hdfs://mycluster:8020/hbase");
customConf.setStrings("hbase.zookeeper.quorum", "mycluster:2181");
// 提高RPC通訊時長
customConf.setLong("hbase.rpc.timeout", 600000);
// 設定Scan快取
customConf.setLong("hbase.client.scanner.caching", 1000);
// 預設為9000毫秒
customConf.set("zookeeper.session.timeout", "180000");
Configuration configuration = HBaseConfiguration.create(customConf);
AggregationClient aggregationClient = new AggregationClient(configuration);
Scan scan = new Scan();
// 指定掃描列族,唯一值
scan.addFamily(Bytes.toBytes("info"));
long rowCount = aggregationClient.rowCount(TableName.valueOf("stu"),new LongColumnInterpreter(), scan);
System.out.println("row count is " + rowCount);
}
}


HBase的協處理器案例
  協處理器其中的一個作用是使用Observer建立二級索引,一般來說,對資料庫建立索引,往往需要單獨的資料結構來儲存索引的資料。在為hbase建立索引時,可以另外建立一張索引表,查詢時先查詢索引表,然後用查詢結果查詢資料表.。
 

所以為了解決這個問題,hbase專案應運而生,它的主要思想是在region級別建立索引而不是在表級別。
參考: http://www.oschina.net/question/12_32573