Hbase协处理器(Coprocessors)

将计算推送到 RegionServer,减少服务器和客户的的数据通信开销,提高 HBase 的计算性能

协处理器框架主要分为两大类,即 Observer 和 Endpoint
Observer 和 RDMBS 的触发器很类似,在一些特定的事件发生时被执行。这些事件包括用户产生的事件,也包括服务器内部产生的事件。
Endpoint 和 RDMBS 的存储过程很类似,用户提供一些自定义代码,并在 HBase 服务器端执行,结果通过 RPC 返回给客户。比较常见的场景包括聚合操作(求和、计数等)。

1、判断协处理器设置是否生效
hbase(main):001:0> desc 'test:DW_F_XDR_HTTP_FGCSVSH_USR_H'

2、卸载协处理器
hbase(main):002:0> disable 'test:DW_F_XDR_HTTP_FGCSVSH_USR_H'
hbase(main):003:0> alter 'test:DW_F_XDR_HTTP_FGCSVSH_USR_H',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
hbase(main):004:0> enable 'test:DW_F_XDR_HTTP_FGCSVSH_USR_H'


3、通过 HBase Shell 部署
hbase(main):005:0> alter 'test:DW_F_XDR_HTTP_FGCSVSH_USR_H',METHOD=>'table_att','coprocessor'=>'/tmp/coprocessor/un-offlinedata-0.0.1-SNAPSHOT093001.jar|com.bdpp.hbase.coprocessor.server.MultiGroupByCoprocessorEndPoint||'


坑一:在打 jar 包时,强烈建议只打自己的 calss 文件进 jar 包
坑二:之前使用过同名jar包创建协处理器,代码升级(修改、添加了协处理器类名)后,一定要修改jar包名称

 

2019-09-30 16:33:02,691 WARN [org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel] - Call failed on IOException
org.apache.hadoop.hbase.exceptions.UnknownProtocolException: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name multiGroupByService in region test:DW_F_XDR_HTTP_FGCSVSH_USR_H,,1566311115729.da659da17288ae8745c90171ee780cee.
	at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7907)
	at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:1969)
	at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:1951)
	at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:33652)
	at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2191)
	at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112)
	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:183)
	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:163)

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106)
	at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:95)
	at org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException(ProtobufUtil.java:332)
	at org.apache.hadoop.hbase.protobuf.ProtobufUtil.execService(ProtobufUtil.java:1637)
	at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel$1.call(RegionCoprocessorRpcChannel.java:104)
	at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel$1.call(RegionCoprocessorRpcChannel.java:94)
	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:136)
	at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel.callExecService(RegionCoprocessorRpcChannel.java:107)
	at org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel.callMethod(CoprocessorRpcChannel.java:56)
	at com.bdpp.hbase.coprocessor.server.MultiGroupByCoprocessor$multiGroupByService$Stub.getMultiGroupBy(MultiGroupByCoprocessor.java:3678)
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient$2.call(MultiGroupByClient.java:316)
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient$2.call(MultiGroupByClient.java:303)
	at org.apache.hadoop.hbase.client.HTable$15.call(HTable.java:1800)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.exceptions.UnknownProtocolException): org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name multiGroupByService in region test:DW_F_XDR_HTTP_FGCSVSH_USR_H,,1566311115729.da659da17288ae8745c90171ee780cee.
	at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7907)
	at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:1969)
	at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:1951)
	at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:33652)
	at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2191)
	at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112)
	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:183)
	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:163)

	at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1269)
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:227)
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:336)
	at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.execService(ClientProtos.java:34118)
	at org.apache.hadoop.hbase.protobuf.ProtobufUtil.execService(ProtobufUtil.java:1633)
	... 13 more
2019-09-30 16:33:02,692 WARN [org.apache.hadoop.hbase.client.HTable] - Error calling coprocessor service com.bdpp.hbase.coprocessor.server.MultiGroupByCoprocessor$multiGroupByService for row 000000006511012019092602
java.util.concurrent.ExecutionException: java.lang.NullPointerException
	at java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.util.concurrent.FutureTask.get(FutureTask.java:192)
	at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1812)
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient.execFastEndpointCoprocessor(MultiGroupByClient.java:300)
	at com.bdpp.dataonline.server.handler.task.QuerySubscriberAppFlowTask.dataTransmit(QuerySubscriberAppFlowTask.java:146)
	at com.bdpp.dataonline.server.handler.task.QuerySubscriberAppFlowTask.doPost(QuerySubscriberAppFlowTask.java:71)
	at com.test.netty.task.ServiceGateTask.runTask(ServiceGateTask.java:150)
	at com.test.netty.task.AbstractHTTPTask.onEvent(AbstractHTTPTask.java:141)
	at com.test.netty.task.AbstractHTTPTask.onEvent(AbstractHTTPTask.java:1)
	at com.lmax.disruptor.WorkProcessor.run(WorkProcessor.java:139)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient$1.update(MultiGroupByClient.java:261)
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient$1.update(MultiGroupByClient.java:257)
	at org.apache.hadoop.hbase.client.HTable$15.call(HTable.java:1803)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	... 1 more
java.lang.NullPointerException
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient$1.update(MultiGroupByClient.java:261)
	at com.bdpp.hbase.coprocessor.client.MultiGroupByClient$1.update(MultiGroupByClient.java:257)
	at org.apache.hadoop.hbase.client.HTable$15.call(HTable.java:1803)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值