https://www.cnblogs.com/frankdeng/p/9310340.html
协处理器是HBase中一种高级组件,可以让用户在region所在的服务器上运行自定义的代码。与传统的RDBMS中的触发器和存储过程类似。
分为:
observer:类似于触发器(RegionObserver,WALObserver,MasterObserver)
endpoint:类似于存储过程
使用协处理器实现二级索引:
create \'guanzhu\' ,\'cf\'
create ‘fans’,\'cf\'
put \'guanzhu\',\'canglaoshi\',\'cf:name\',\'ronaldo\'
put \'fans\',\'ronaldo\',\'cf:star\',\'canglaoshi\'
创建协处理器类:
object HbaseCoprocessor extends BaseRegionObserver{
override def prePut(e: ObserverContext[RegionCoprocessorEnvironment], put: Put, edit: WALEdit, durability: Durability): Unit ={
//获取行键
var row: Array[Byte] = put.getRow
//获取name属性对应的多个版本的值
var cells: util.List[Cell] = put.get(Bytes.toBytes("cf"),Bytes.toBytes("name"))
//获取到最新版本的值
var cell: Cell = cells.get(0)
//获取到值
var value: Array[Byte] = CellUtil.cloneValue(cell)
//创建新的put对象
var put1: Put = new Put(value)
put1.addColumn(CellUtil.cloneFamily(cell),Bytes.toBytes("star"),row)
//提交
HbaseUtils.insert("fans",put1)
}
}
打包上传
上传到hdfs中
执行命令导入协处理器
disable \'guanzhu\'
alter \'guanzhu\',METHOD=>\'table_att\',\'coprocessor\'=>\'hdfs://hbase1:9000/hbase/guanzhu.jar|HbaseCoprocessor \'
enable \'guanzhu\'