本帖最后由 pig2 于 2014-8-22 11:20 编辑
问题导读
1.如何建立全局二级索引?
2.如何对一个表建立二级索引?
3.如何卸载二级索引?
环境:hadoop2.2+hbase0.94不过同样应该适用于hadoop2.4及hbase0.985,未测试
二级索引可以对单个表建立索引,也可以全局建立索引,也就是对所有表:
1.全局建立索引,可以修改hbase-site.xml文件
- <property>
- <name>hbase.coprocessor.region.classes</name>
- <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
- </property> 为所有table加载了一个cp class,可以用”,”分割加载多个class
复制代码
2.单个表建立索引
步骤:
1.首先disable ‘表名’
2.然后修改表
- alter 'LogTable',METHOD=>'table_att','coprocessor'=>'hdfs:///test.jar|www.aboutyun.com.hbase.HbaseCoprocessor|1001'
复制代码
3.enable '表名'
3.卸载索引
- alter 'LogTable', METHOD => 'table_att_unset', NAME => 'coprocessor$1‘
复制代码
4.建立索引实例:
建立二级索引,首先如下程序:
- package aboutyun;
-
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.List;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.hbase.Cell;
- 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 HbaseCoprocessor extends BaseRegionObserver {
-
- public void prePut(final ObserverContext<RegionCoprocessorEnvironment> e,
- final Put put, final WALEdit edit, final boolean writeToWAL)
- throws IOException {
- // set configuration
- Configuration conf = new Configuration();
- // need conf.set...
- String colName = "columnName";
- HTable table = new HTable(conf, "indexTableName");
- List<Cell> kv = put.get("familyName".getBytes(), colName.getBytes());
- Iterator<Cell> kvItor = kv.iterator();
- while (kvItor.hasNext()) {
- Cell tmp = kvItor.next();
- Put indexPut = new Put(tmp.getValue());
- indexPut.add("familyName".getBytes(), "columnName".getBytes(),
- tmp.getRow());
- table.put(indexPut);
- }
- table.close();
- }
-
- }
复制代码
根据自己的实际情况修改,然后打包test.jar,放到hdfs文件系统中。
进入hbase shell,执行如下命令:
- alter 'LogTable',METHOD=>'table_att','coprocessor'=>'hdfs:///test.jar|www.aboutyun.com.hbase.HbaseCoprocessor|1001'
复制代码
查看是否创建成功
HBaseCoprocessor pdf
HBaseCoprocessor.zip
(1.29 MB, 下载次数: 326, 售价: 1 云币)
|