【问题标题】:Protobuf error with custom filter自定义过滤器的 Protobuf 错误
【发布时间】:2014-05-22 11:47:10
【问题描述】:

当我运行我的 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(Thread.java:744) 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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(Native Method) 在 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 更多

有人知道我该如何解决吗?

【问题讨论】:

    标签: hadoop hbase


    【解决方案1】:

    我在尝试制作自定义过滤器时也遇到了这个错误。我的问题是我的过滤器中没有包含函数“toByteArray”和“parseFrom”。请参阅here 了解我在哪里找到了解决方案以及示例链接。 (我花了两个星期的时间去寻找 - HBase 真的可以使用一些更好的文档......)

    至于需要进入这些方法的内容,我仍然在这方面遇到了麻烦。从概念上讲(据我了解),它们的目的是将您的过滤器实例的识别信息(基本上,您将发送给构造函数的信息)编码和解码为序列化的字节串。这样,特定的过滤器就可以在任何需要的地方“实例化”。

    对我来说,包括这些方法可以防止挂起和错误,我的程序现在运行完成。不过,我认为我并没有完全正确理解这些方法,因为过滤器似乎仍然没有真正运行,但这是另一个话题。 (如果你发现了,let me know!)

    【讨论】:

    • 链接不见了,请问您是怎么​​解决的呢?我正在为此苦苦挣扎。
    【解决方案2】:

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

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

    缺失的链接现在位于here

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2018-08-06
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多