hbase自定义过滤器异常

woloqun 2014-06-08 09:28:19
写了一个hbase的过滤器例子,就对rowkey判断一下
import java.io.IOException;
import java.util.List;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.filter.FilterBase;

public class ComterFilter extends FilterBase{

@Override
public boolean filterAllRemaining() throws IOException {
return super.filterAllRemaining();
}

@Override
public ReturnCode filterKeyValue(Cell ignored) throws IOException {
return super.filterKeyValue(ignored);
}

@Override
public boolean filterRow() throws IOException {
return super.filterRow();
}

@Override
public boolean filterRowKey(byte[] buffer, int offset, int length)
throws IOException {
String rowKey = new String(buffer);
System.out.println("rowkey====="+rowKey);
if("01d7f40760960e7bd9443513f22ab9af".equals(rowKey)){
return true;
}else{
return false;
}
}

@Override
public void filterRowCells(List<Cell> ignored) throws IOException {
super.filterRowCells(ignored);
}

@Override
public void filterRow(List<KeyValue> arg0) {

}
}

已经修改过HBASE_CLASSPATH,并且已经重启
但是运行时报错了,报错信息如下,有没有大牛指导一下
Sun Jun 08 17:46:43 CST 2014, org.apache.hadoop.hbase.client.RpcRetryingCaller@6cb107fd, java.io.IOException: java.io.IOException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1297)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toScan(ProtobufUtil.java:886)
at org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3005)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:26929)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2185)
at org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1889)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1295)
... 5 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:266)
... 10 more

Sun Jun 08 17:46:43 CST 2014, org.apache.hadoop.hbase.client.RpcRetryingCaller@6cb107fd, java.io.IOException: java.io.IOException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1297)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toScan(ProtobufUtil.java:886)
at org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3005)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:26929)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2185)
at org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1889)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1295)
... 5 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:266)
... 10 more

Sun Jun 08 17:46:44 CST 2014, org.apache.hadoop.hbase.client.RpcRetryingCaller@6cb107fd, java.io.IOException: java.io.IOException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1297)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toScan(ProtobufUtil.java:886)
at org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3005)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:26929)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2185)
at org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1889)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1295)
... 5 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:266)
... 10 more



...全文
3099 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hell_Heaven 2016-02-01
  • 打赏
  • 举报
回复
引用 1 楼 dinghun8leech 的回复:
你需要在自订filter中覆写这三个方法: public static Filter parseFrom(final byte [] pbBytes) throws DeserializationException public static Filter createFilterFromArguments(ArrayList<byte[]> filterArguments) public byte [] toByteArray() 还要用到protobuf实现参数序列化反序列化,用于client到regionServer进行rpc调用时的过滤器参数传输。 parseFrom called on base Filter, but should be called on derived type错的原因是上述三个方法中的第一个没有覆写,hbase直接调了自订Filter的父类Filter的该方法造成的。 参考: http://shift-alt-ctrl.iteye.com/blog/2073581 中的第7项:自定义Filter代码样例
请赐一段代码。。。。
dinghun8leech 2014-08-01
  • 打赏
  • 举报
回复
你需要在自订filter中覆写这三个方法: public static Filter parseFrom(final byte [] pbBytes) throws DeserializationException public static Filter createFilterFromArguments(ArrayList<byte[]> filterArguments) public byte [] toByteArray() 还要用到protobuf实现参数序列化反序列化,用于client到regionServer进行rpc调用时的过滤器参数传输。 parseFrom called on base Filter, but should be called on derived type错的原因是上述三个方法中的第一个没有覆写,hbase直接调了自订Filter的父类Filter的该方法造成的。 参考: http://shift-alt-ctrl.iteye.com/blog/2073581 中的第7项:自定义Filter代码样例

785

社区成员

发帖
与我相关
我的任务
社区描述
云计算 网络相关讨论
社区管理员
  • 网络
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧