当前位置 : 主页 > 编程语言 > java >

hbase 中的二级索引--通过一个 二级 rowkey 确定搜索目标,对应的列簇是 定义的一

来源:互联网 收集:自由互联 发布时间:2021-06-28
SecondaryIndexAutoUpdate.java package com.bd17.observer;import java.io.IOException;import java.util.List;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.Cell;import org.apache.hadoop.hbase.CellUtil;import org.apac
SecondaryIndexAutoUpdate.java
package com.bd17.observer;

import java.io.IOException;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
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;
import org.apache.hadoop.hbase.util.Bytes;

//使用observer的coprocessor来自动更新order_item二级索引数据
//create 'order_item','i'
//create 'order_item_subtotal_index','r'
//把这个协处理器添加到order_item表上,索引数据自动更新到order_item_subtotal_index里
public class SecondaryIndexAutoUpdate extends BaseRegionObserver{

	/*
	 *  在表数据被put之前执行索引表数据的添加
	 * @ put  待被插入到 bd17:order_item 表中的 put 对象
	 */
	@Override
	public void prePut(ObserverContext
 
   e, Put put, WALEdit edit, Durability durability)
			throws IOException {
		
		// 参数 put 中就是要保存近 bd17:order_item 的put 对象,从中获取 subtotal 和 rowkey
		// 保存到 bd17:order_item_subtotal_index 中
		List
  
    subtotalCell = put.get(Bytes.toBytes("i"), Bytes.toBytes("subtotal")); if (subtotalCell !=null && subtotalCell.size() > 0) { RegionCoprocessorEnvironment environment = e.getEnvironment(); Configuration conf = environment.getConfiguration(); Connection conn = ConnectionFactory.createConnection(conf); Table table = conn.getTable(TableName.valueOf("bd17:order_item_subtotal_index")); // 构建要保存索引数据的 put 对象 Put indexPut = new Put(CellUtil.cloneValue(subtotalCell.get(0))); indexPut.addColumn(Bytes.toBytes("i"), put.getRow(), null); table.put(indexPut); table.close(); } } // 步骤1. 创建项目,添加 hbase 依赖,在项目定义 observe 类,继承 BaseRegionObserver 类,重写方法实现 监听触发的功能 // 2. 项目打包成 jar 包,放到 hdfs 上 // alter 'bd17:order_item','coprocessor'=>'hdfs:///coprocessor.jar|com.zhiyou.bd17.observer.SecondaryIndexAutoUpdate|1001|' // 3. 把协处理器添加到表 bd17:order_item 上,实现监听 }
  
 
网友评论