協處理器在本專案中主要是用來,在向hbase中put一條資料時同時也要put一條call1和call2顛倒的資料
注意:1、協處理器如果是配置到hbase-site.xml檔案中,預設是對全部的表都進行處理
2、如果不配置到xml檔案,只指定某個表,那麼就只對改表有效
3、注意將consumer進行編譯,打包,打包後上傳到hbase的lib包下,記住記住,一定要分發這個jar包
4、一定要慎用,如果出現問題,就在hbase-site.xml中配置,見之前部落格
本專案的協處理器:
public class calleeconprocess extends baseregionobserver
//取出上乙個操作的put
string oldrow = bytes.tostring(put1.getrow());
string splits = oldrow.split("_");
//!切割後的資料判斷flag是不是0,不是0的話會死迴圈
if("1".equals(splits[4])) return;
string call1 = splits[1];
string buildtime = splits[2];
string call2 = splits[3];
string flag = splits[4];
string duration = splits[5];
//獲取上乙個put,並生成新的,要插入的put
string newpar = hbaseutil.getpartionkey(call2,buildtime,regions);
string newkey = hbaseutil.getrowkey(newpar,call2,buildtime,call1,"1",duration);
put newput = new put(bytes.tobytes(newkey));
//在新的put中新增資料
newput.addcolumn(bytes.tobytes(cf2),bytes.tobytes("call1"),bytes.tobytes(call2));
newput.addcolumn(bytes.tobytes(cf2),bytes.tobytes("buildtime"),bytes.tobytes(buildtime));
newput.addcolumn(bytes.tobytes(cf2),bytes.tobytes("call2"),bytes.tobytes(call1));
newput.addcolumn(bytes.tobytes(cf2),bytes.tobytes("flag"),bytes.tobytes("1"));
newput.addcolumn(bytes.tobytes(cf2),bytes.tobytes("duration"),bytes.tobytes(duration));
//插入資料
connection connection = connectionfactory.createconnection(constant.hbaseconfiguration);
table table = connection.gettable(tablename.valueof(tablename));
table.put(newput);
//關閉資源
table.close();
connection.close();
}}
在hbaseutil中修改
htabledescriptor.addcoprocessor("com.xin.conprocess.calleeconprocess");
hbase 協處理器 部署 hbase 協處理器
1 自定義協處理器 hbase 版本 2.x 使用自定義的協處理器需要實現coprocessor,regionobserver,coprocessorservice這三個介面,如下圖 可以看出協處理器的載入分為靜態載入和動態載入,靜態載入需要修改hbase site.xml配置檔案,這將對所有的hb...
HBase協處理器
協處理器分兩種型別,系統協處理器可以全域性匯入region server上的所有資料表,表協處理器即是使用者可以指定一張表使用協處理器。協處理器框架為了更好支援其行為的靈活性,提供了兩個不同方面的外掛程式。乙個是觀察者 observer 類似於關聯式資料庫的觸發器。另乙個是終端 endpoint 動...
Hbase協處理器
hbase作為資料庫最經常被人詬病的特性包括 無法輕易建立 二級索引 難以求和 計數 排序等操作 比如,在舊版本的 0.92 hbase中,統計資料表的行數,需要使用counter方法,執行一次mapreduce job 才能得到。雖然hbase在資料儲存層中整合了mapreduce,能夠有效用於資...