分享

hbase如何创建二级索引以及创建二级索引实例

本帖最后由 pig2 于 2014-8-22 11:20 编辑

问题导读
1.如何建立全局二级索引?
2.如何对一个表建立二级索引?
3.如何卸载二级索引?




环境:hadoop2.2+hbase0.94不过同样应该适用于hadoop2.4及hbase0.985,未测试
二级索引可以对单个表建立索引,也可以全局建立索引,也就是对所有表:

1.全局建立索引,可以修改hbase-site.xml文件
  1. <property>
  2. <name>hbase.coprocessor.region.classes</name>
  3. <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
  4. </property> 为所有table加载了一个cp class,可以用”,”分割加载多个class
复制代码



2.单个表建立索引
步骤:
1.首先disable ‘表名’
2.然后修改表
  1. alter 'LogTable',METHOD=>'table_att','coprocessor'=>'hdfs:///test.jar|www.aboutyun.com.hbase.HbaseCoprocessor|1001'
复制代码

3.enable '表名'
3.卸载索引
  1. alter 'LogTable', METHOD => 'table_att_unset', NAME => 'coprocessor$1‘
复制代码

4.建立索引实例:

建立二级索引,首先如下程序:

  1. package aboutyun;
  2. import java.io.IOException;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import org.apache.hadoop.conf.Configuration;
  6. import org.apache.hadoop.hbase.Cell;
  7. import org.apache.hadoop.hbase.KeyValue;
  8. import org.apache.hadoop.hbase.client.HTable;
  9. import org.apache.hadoop.hbase.client.Put;
  10. import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
  11. import org.apache.hadoop.hbase.coprocessor.ObserverContext;
  12. import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
  13. import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
  14. public class HbaseCoprocessor extends BaseRegionObserver {
  15.         public void prePut(final ObserverContext<RegionCoprocessorEnvironment> e,
  16.                         final Put put, final WALEdit edit, final boolean writeToWAL)
  17.                         throws IOException {
  18.                 // set configuration
  19.                 Configuration conf = new Configuration();
  20.                 // need conf.set...
  21.                 String colName = "columnName";
  22.                 HTable table = new HTable(conf, "indexTableName");
  23.                 List<Cell> kv = put.get("familyName".getBytes(), colName.getBytes());
  24.                 Iterator<Cell> kvItor = kv.iterator();
  25.                 while (kvItor.hasNext()) {
  26.                         Cell tmp = kvItor.next();
  27.                         Put indexPut = new Put(tmp.getValue());
  28.                         indexPut.add("familyName".getBytes(), "columnName".getBytes(),
  29.                                         tmp.getRow());
  30.                         table.put(indexPut);
  31.                 }
  32.                 table.close();
  33.         }
  34. }
复制代码

根据自己的实际情况修改,然后打包test.jar,放到hdfs文件系统中。

进入hbase  shell,执行如下命令:
  1. alter 'LogTable',METHOD=>'table_att','coprocessor'=>'hdfs:///test.jar|www.aboutyun.com.hbase.HbaseCoprocessor|1001'
复制代码
创建索引成功.png



查看是否创建成功
chuangjianchenggong.png


HBaseCoprocessor pdf 1.png


HBaseCoprocessor.zip (1.29 MB, 下载次数: 326, 售价: 1 云币)

已有(24)人评论

跳转到指定楼层
GreenArrow 发表于 2014-9-11 21:13:44
非常的不错哦,谢谢
回复

使用道具 举报

kakapengV587 发表于 2014-9-12 22:28:49
kettle,你值得拥有
回复

使用道具 举报

break-spark 发表于 2014-10-11 15:44:15
学习了,真心赞
回复

使用道具 举报

CM潜修 发表于 2014-10-15 18:08:43
很好的东西分享。。。谢谢
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条