Hbase的Observer


hbase提供了類似於觸發器的組件observer,類似於存儲過程的endpoint。

hbase中的observer分別三類,MasterObserver、RegionObserver、WALObserevr

使用java代碼也可以達到相同的效果,但是服務器端的observer相對是比較高效的

一、自定義obserevr

1.1繼承BaseMasterObserver,重寫其相應的方法

public class MyObserver extends BaseMasterObserver{

    private Logger logger = LoggerFactory.getLogger(MyObserver.class);
    
    @Override
    public void preCreateTable(ObserverContext<MasterCoprocessorEnvironment> ctx, HTableDescriptor desc,
            HRegionInfo[] regions) throws IOException {
        logger.info("**************create table******************");
    }
    
    @Override
    public void preDeleteTable(ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)
            throws IOException {
        logger.info("**************delete table******************");
    }
}

1.2打成jar包放到hbase的lib目錄下

1.3修改hbase-site.xml文件

這是hbase-default.xml文件中的配置

  <property>
    <name>hbase.coprocessor.master.classes</name>
    <value></value>
  </property>

修改為:

 <property>
                <name>hbase.coprocessor.master.classes</name>
                <value>com.lanyun.hadoop2.MyObserver</value>
</property>

1.4重啟hbase集群

1.5創建一張表,並且觀察日志的變化

創建語句:

create 'tt1','f1'

日志的輸出:

2016-07-21 00:10:19,602 INFO  [FifoRpcScheduler.handler1-thread-1] hadoop2.MyObserver: **************create table******************
2016-07-21 00:10:19,602 INFO  [FifoRpcScheduler.handler1-thread-1] master.HMaster: Client=root//192.168.163.129 create 'tt1', {NAME => 'f1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM