Hadoop 带有自定义筛选器的Protobuf错误

Hadoop 带有自定义筛选器的Protobuf错误,hadoop,hbase,Hadoop,Hbase,运行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) 位于or

运行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) 运行(Thread.java:744) 原因:java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.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多 原因:java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.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(filter.java:267) ... 20多


有人知道我怎么修吗

我在尝试创建自定义筛选器时也出现了此错误。我的问题是,我的过滤器中没有包含函数“toByteArray”和“parseFrom”。请参阅我在哪里找到解决方案,以及示例链接。(我花了两周的时间才找到——HBase真的需要一些更好的文档…)

至于那些方法需要做些什么,我在这方面仍然有困难。在概念上(据我所知),它们的目的是将过滤器实例的标识信息(基本上是发送给构造函数的信息)编码并解码为一个序列化的字节字符串。这样,可以在任何需要的地方“实例化”特定过滤器


对我来说,包括这些方法防止了挂起和错误,我的程序现在一直运行到完成。不过,我不认为我完全正确地理解了这些方法,因为过滤器似乎仍然没有实际运行,但这是另一个主题。(如果你找到了答案,!)

我有一台集群服务器出现了同样的错误。注意toByteArray和parseFrom已经存在,并且相同的jar文件在其他集群上工作得很好。我能够通过重新启动HBase和Zookeeper服务来解决这个问题,同时确保/HBase/lib文件夹和自定义过滤器jar文件首先拥有适当的所有者(将其设置为HBase用户)

我无法复制错误,但我在上面所做的为我解决了它。我尝试更改所有者,/HBase/lib文件夹的HBase配置,创建了一个新文件夹,但无法复制它,因此只能重新启动HBase


丢失的链接现在已找到

链接已不存在,您是如何解决此问题的?我正在努力解决这个问题。