Hbase协处理器
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'