(原文地址:http://www.jb51.cc/cata/500599,转载麻烦带上原文地址。hadoop hive hbasemahout storm spark kafka flume,等连载中,做个爱分享的人)
1 那么问题又来了????
1:如果要对HBase的User表,做一些sum,orderby等常用的聚合怎么搞。1:如果javaapi 全部读出来,表太大时显然这种方案不合适,2,mapreduce 分布式的批量读出再算,但是当数据小的时候,mr任务要消耗的资源大,有点牛刀。
为解决这种 sum,orderby等常用的聚合聚合操作的,HBase的org.apache.hadoop.hbase.coprocessor 协处理器机智,提供在服务端region运行代码的机制,的解决方案,如GET 操作,直接在服务端执行。并不需要把结果返回回来。中国山东找蓝翔。
2:假设我们在user表执行DELETE 或者GET等操作之后,要做操作日志
HBase的org.apache.hadoop.hbase.coprocessor 协处理器也能处理这样的需求。
2 协处理器概述
HBase有全表,和单表两种作用域的协处理器,以及 observer和endpoint两种调用方式的协处理器,observer为hbase 的GET,PUT,SCAN,DELETE等操作提供了Hook钩子,类似于onClick do,适合在表的某些操作前后的需求。endpoint是一个服务端的方法,我们要使用时,通过rpc可以直接调用,适合做聚合。
3.1 协处理器observer模式关键API
3.2 协处理器endpoint(RPC)模式关键API
3.2.1服务端类关键接口
//接受到请求后,真正执行的方法。
实现com.google.protobuf.Service里的接口
//初始化获取env对象。
public void start(CoprocessorEnvironment env) throws IOException {}
//结束时关闭相关资源
public void stop(CoprocessorEnvironment env) throws IOException{}
3.2.2客户端端类关键接口
//发起请求
coprocessorService(java.lang.Class,byte[],org.apache.hadoop.hbase.client.coprocessor.Batch.Call)]coprocessorService[/url](Class<T> service,byte[] startKey,byte[] endKey,org.apache.hadoop.hbase.client.coprocessor.Batch.Call<T,R> callable)
//执行rpc请求的时候,真正执行的代码,在服务端执行。
public Long call(TestEndpoint.CountService counter)
4.1 协处理器observer模式程序
有空再补充
4.2 协处理器endpoint(RPC)模式程序 有空再补充