posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          搜索

          •  

          最新評論

          htable coprocessor使用

          Posted on 2012-08-16 17:30 云云 閱讀(1177) 評論(1)  編輯  收藏
          在網瀏覽的時候  發現了這篇文章  很有用  就保留了下來

          hbase不是數據庫,一些數據庫中基本的功能hbase并不具備.
          二級索引就是其中很重要的一點,在數據庫中索引是在平常不過的功能了.
          而在hbase中,value上的索引只能靠自己來實現.

          hbase中最簡單的二級索引的實現方式是通過另外一個hbase表來實現.
          下面通過postput方法,實現對表sunwg01的二級索引.

          舉例說下二級索引實現:
          表sunwg01的f1:k1有如下記錄
          100 tom
          101 mary

          對于表sunwg01來說,可以通過100,101直接訪問記錄,但是如果想要訪問mary這條記錄,則只能全表遍歷
          為了解決這個問題,創建了表sunwg02
          表sunwg02中的f1:k1有如下記錄
          tom 100
          mary 101

          現在如果要查找mary這條記錄,可以先查表sunwg02中,找到mary的value的為101

          下面通過postput方式實現,在put源表的同時更新索引表的功能。
          詳細代碼如下:

          import java.io.IOException; import java.util.Iterator; import java.util.List;   import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; 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.wal.WALEdit;   public class postput_test extends BaseRegionObserver {         @Override      public void postPut(final ObserverContext<RegionCoprocessorEnvironment> e,           final Put put, final WALEdit edit, final boolean writeToWAL) throws IOException {             HTable table = new HTable("sunwg02");           List<KeyValue> kv = put.get("f1".getBytes(), "k1".getBytes());           Iterator<KeyValue> kvl = kv.iterator();             while(kvl.hasNext()) {               KeyValue tmp = kvl.next();               Put tput = new Put(tmp.getValue());               tput.add("f1".getBytes(),"k1".getBytes(),tmp.getRow());               table.put(tput);             }           table.close();       } 






          評論

          # re: htable coprocessor使用   回復  更多評論   

          2013-08-09 15:33 by jxauwxj@126.com
          請問一下,我試了好次,都沒成功自動創建索引。請問大神你是如何做的?謝謝


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 冕宁县| 尤溪县| 绥江县| 吉木乃县| 麦盖提县| 汝南县| 太湖县| 绥化市| 泗阳县| 缙云县| 如皋市| 长丰县| 卓资县| 卢湾区| 绥江县| 丹巴县| 上犹县| 兴国县| 新竹县| 安西县| 光山县| 体育| 鲁甸县| 祁东县| 定襄县| 盐津县| 如东县| 徐闻县| 青铜峡市| 改则县| 乡宁县| 尤溪县| 合山市| 太白县| 古浪县| 大港区| 杭锦后旗| 广元市| 越西县| 大英县| 东兰县|