2014-05-22 2 views
4

나는이 오류가있어 내 HBase를 사용자 정의 필터를 실행하면 : 내가 그것을 고칠 수있는 방법Protobuf 오류

[email protected], java.io.IOException: java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1360) at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toScan(ProtobufUtil.java:916) at org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3056) at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:28454) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2008) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:92) at org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.consumerLoop(SimpleRpcScheduler.java:160) at org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.access$000(SimpleRpcScheduler.java:38) at org.apache.hadoop.hbase.ipc.SimpleRpcScheduler$1.run(SimpleRpcScheduler.java:110) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1358) ... 9 more Caused by: org.apache.hadoop.hbase.exceptions.DeserializationException: java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.hbase.filter.FilterList.parseFrom(FilterList.java:406) ... 14 more Caused by: java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1360) at org.apache.hadoop.hbase.filter.FilterList.parseFrom(FilterList.java:403) ... 14 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1358) ... 15 more Caused by: org.apache.hadoop.hbase.exceptions.DeserializationException: parseFrom called on base Filter, but should be called on derived type at org.apache.hadoop.hbase.filter.Filter.parseFrom(Filter.java:267) ... 20 more

누구나 알고 있습니까?

답변

5

맞춤 필터를 만들 때도이 오류가 발생했습니다. 내 문제는 내 필터에 "toByteArray"및 "parseFrom"함수를 포함하지 않았다는 것입니다. 솔루션을 찾은 곳과 예제 링크는 here을 참조하십시오. HBase는 실제로 더 나은 문서를 사용할 수 있습니다.)

그런 방법으로 갈 필요가있는 한, 나는 그 점에서 여전히 문제가 있습니다. 개념적으로 (필자가 이해 하듯이) 그들의 목적은 필터 인스턴스 (기본적으로 생성자에게 보낼 정보)의 식별 정보를 직렬화 된 바이트 문자열로 인코딩하고 디코딩하는 것입니다. 그런 식으로 특정 필터는 필요할 때마다 '인스턴스화'될 수 있습니다.

나를 위해, 이러한 방법을 포함하여 중지 및 오류를 방지하고 이제 내 프로그램이 완료 될 때까지 실행됩니다. 필자는 필터가 실제로 실행되지 않는 것처럼 완전히 메서드를 올바르게 이해한다고는 생각하지 않지만 또 다른 주제입니다. (알아 낸 것이라면 let me know!)

+0

링크가 사라 졌으므로 문제를 어떻게 해결 했습니까? 나는 그것에 고심하고있다. – jlucky

관련 문제