自定义筛选器的protobuf错误

amrnrhlw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(382)

当我运行hbase自定义筛选器时,出现以下错误:
org.apache.hadoop.hbase.client。rpcretryingcaller@459c8c0a,java.io.ioexception:java.io.ioexception:java.lang.reflect.invocationtargetexception位于org.apache.hadoop.hbase.protobuf.protobufutil.tofilter(protobufutil)。java:1360)在org.apache.hadoop.hbase.protobuf.protobufutil.toscan(protobufutil。java:916)在org.apache.hadoop.hbase.regionserver.hregionserver.scan(hregionserver。java:3056)在org.apache.hadoop.hbase.protobuf.generated.clientprotos$clientservice$2.callblockingmethod(clientprotos。java:28454)在org.apache.hadoop.hbase.ipc.rpcserver.call(rpcserver。java:2008)在org.apache.hadoop.hbase.ipc.callrunner.run(callrunner。java:92)位于org.apache.hadoop.hbase.ipc.simplerpcscheduler.consumerloop(simplerpcscheduler)。java:160)在org.apache.hadoop.hbase.ipc.simplerpcscheduler.access$000(simplerpcscheduler。java:38)在org.apache.hadoop.hbase.ipc.simplerpcscheduler$1.run(simplerpcscheduler。java:110)在java.lang.thread.run(线程。java:744)原因:sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)处的java.lang.reflect.invocationtargetexceptionsun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl。java:57)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:606)在org.apache.hadoop.hbase.protobuf.protobufutil.tofilter(protobufutil。java:1358) ... 9其他原因:org.apache.hadoop.hbase.exceptions.deserializationexception:java.io.ioexception:java.lang.reflect.invocationtargetexception位于org.apache.hadoop.hbase.filter.filterlist.parsefrom(filterlist)。java:406) ... 还有14个原因:java.io.ioexception:java.lang.reflect.invocationtargetexception位于org.apache.hadoop.hbase.protobuf.protobufutil.tofilter(protobufutil)。java:1360)在org.apache.hadoop.hbase.filter.filterlist.parsefrom(filterlist。java:403) ... 14其他原因:sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)处的java.lang.reflect.invocationtargetexception at sun.reflect.nativemethodaccessorimpl.invoke(本机方法)at sun.reflect.nativemethodaccessorimpl.invoke(本机方法)。java:57)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:606) 在org.apache.hadoop.hbase.protobuf.protobufutil.tofilter(protobufutil。java:1358) ... 还有15个原因:org.apache.hadoop.hbase.exceptions.deserializationexception:parsefrom在基本筛选器上调用,但应在org.apache.hadoop.hbase.filter.filter.parsefrom(筛选器)的派生类型上调用。java:267) ... 20多个
有人知道我怎么修吗?

cgh8pdjw

cgh8pdjw1#

我也有这个错误时,试图使自定义过滤器。我的问题是我的过滤器中没有包含函数“tobytearray”和“parsefrom”。请参阅此处以了解我在何处找到解决方案,以及指向示例的链接(我花了两个星期的时间才找到——hbase真的需要一些更好的文档……)
至于这些方法需要做些什么,我在这方面仍然有困难。在概念上(据我所知),它们的目的是将filter示例的标识信息(基本上是发送给构造函数的信息)编码和解码为一个字节的序列化字符串。这样就可以在需要的地方“示例化”特定的过滤器。
对我来说,包括这些方法防止了挂起和错误,我的程序现在运行到完成。不过,我不认为我完全正确地理解了这些方法,因为过滤器似乎仍然没有实际运行,但这是另一个主题(如果你发现了,就告诉我!)

bzzcjhmw

bzzcjhmw2#

我有一个集群服务器也出现了同样的错误。注意tobytearray和parsefromwhere已经存在,同一个jar文件在其他集群上工作得很好。我可以通过重新启动hbase和zookeeper服务来解决这个问题,同时确保/hbase/lib文件夹和自定义过滤器jar文件首先具有适当的所有者(将其设置为hbase用户)。
我无法复制错误,但我在上面所做的为我解决了它。我尝试更改所有者,即/hbase/lib文件夹的hbase配置,创建一个新文件夹,但无法复制它,因此只能重新启动hbase。
丢失的链接现在位于此处

相关问题