Hbase0.98.4中部署使用者自訂的Observer Coprocessor

來源:互聯網
上載者:User

Hbase0.98.4中部署使用者自訂的Observer Coprocessor

Hbase自0.92之後開始支援Coprocessor(副處理器),旨在使使用者可以將自己的代碼放在regionserver上來運行,即將計算程式移動到資料所在的位置進行運算。這一點與MapReduce的思想一致。Hbase的Coprocess分為observer和endpoint兩大類。簡單說,observer相當於關係型資料庫中的觸發器,而endpoint則相當於關係型資料庫中的預存程序。關於HBase Coprocessor的介紹網上有很多的文檔,由於我也是剛剛學習,從很多好人貢獻的文檔上瞭解了很多。

這裡記錄一下自己在一個完全分布式系統上部署自訂的Coprocessor的過程,本文會介紹兩種部署的方法:一種是在hbase-site.xml中配置;第二種是使用表描述符來配置(alter);前者會被所有的表的所有的region載入,而後者只會對指定的表的所有region載入。本文會結合自己的實驗過程指出哪些地方為易錯點。

Hadoop+HBase搭建雲端儲存總結 PDF

HBase 結點之間時間不一致造成regionserver啟動失敗

Hadoop+ZooKeeper+HBase叢集配置

Hadoop叢集安裝&HBase實驗環境搭建

基於Hadoop叢集的HBase叢集的配置 ‘

Hadoop安裝部署筆記之-HBase完全分布模式安裝

單機版搭建HBase環境圖文教程詳解

首先,還是先來看下環境:

hadoop1.updb.com    192.168.0.101    Role:master
hadoop2.updb.com    192.168.0.102    Role:regionserver
hadoop3.updb.com    192.168.0.103    Role:regionserver
hadoop4.updb.com    192.168.0.104    Role:regionserver
hadoop5.updb.com    192.168.0.105    Role:regionserver

首先編碼自訂的Coprocessor,該段代碼摘自《Hbase權威指南》 PDF下載見 ,只是修改了package的名字:

/**
 * coprocessor
 * 當使用者在使用get命令從表中取特定的row時,就會觸發這個自訂的observer coprocessor
 * 觸發條件是使用者使用get指定的rowkey與程式中指定的FIXED_ROW一致為@@@GETTIME@@@時
 * 觸發後的操作是程式會在服務端產生一個keyvalue執行個體,並將這個執行個體返回給用戶端。這個kv執行個體是以
 * @@@GETTIME@@@為rowkey,列族和列標識符均為@@@GETTIME@@@,列值為伺服器端的時間
 */
 
package org.apache.hbase.kora.coprocessor;
 
import java.io.IOException;
import java.util.List;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.util.Bytes;
 
public class RegionObserverExample extends BaseRegionObserver {
    public static final Log LOG = LogFactory.getLog(HRegion.class);
    public static final byte[] FIXED_ROW = Bytes.toBytes("@@@GETTIME@@@");
 
    @Override
    public void preGet(ObserverContext<RegionCoprocessorEnvironment> c,
            Get get, List<KeyValue> result) throws IOException {
        LOG.debug("Got preGet for row: " + Bytes.toStringBinary(get.getRow()));
       
        if (Bytes.equals(get.getRow(), FIXED_ROW)) {
            KeyValue kv = new KeyValue(get.getRow(), FIXED_ROW, FIXED_ROW,
                    Bytes.toBytes(System.currentTimeMillis()));
            LOG.debug("Had a match, adding fake kv: " + kv);
            result.add(kv);
        }
    }
}

編碼完成後需要將該類編譯並打成jar包,類名上右擊--Export,彈出如下視窗

選擇JAR file,然後Next,出現如下視窗

指定jar檔案的儲存路徑,然後finish,就完成了RegionObserverExample類的編譯和打包,接下來就需要將打好的jar檔案使用ftp的方式上傳到hbase叢集的master伺服器上,這裡為hadoop1。

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.