hbase自定义过滤器
Posted demo123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hbase自定义过滤器相关的知识,希望对你有一定的参考价值。
1. 下载protobuf-2.5.0解压,如果是window下,额外下载protoc-2.5.0-win32,解压,将protoc.exe放在protobuf-2.5.0下的src目录下
2. 配置环境变量,添加path路径指向protobuf目录的src中
3. 查看当前版本,在命令提示符中输入命令
4. 创建一个空白的文本文件 命名为 CustomNumberComparator.proto 即 后缀文件类型为proto
5. 用记事本打开CustomNumberComparator.proto文件输入以下内容
6. 进入命令提示符,使用命令读取CustomNumberComparator.proto的内容生成java代码,即自定义比较器的序列化类
内容: protoc.exe -I=C:/proto --java_out=C:/proto C:/proto/CustomNumberComparator.proto
输入后会在指定的/protoc中生成一个文件夹
得到自定义比较器的序列化类
7. 将生成的文件夹拷贝到idea编程工具中,注意粘贴的路径为java下
8. 新建一个自定义过滤器类CustomNumberComparator
9. CustomNumberComparator继承ByteArrayComparable类,重写方法,代码如下
10.核心内容为compareTo方法的内容,即为过滤的逻辑实现
@Override
public int compareTo(byte[] bytes, int offset, int length) {
if (fieldType.equalsIgnoreCase("String")) {
//HbaseValue是在Hbase上搜索到的一条数据
String HbaseValue = Bytes.toString(bytes, offset, length).toLowerCase(Locale.ROOT);
String substring1 = HbaseValue.substring(1, 5);
String substring2 = HbaseValue.substring(17, 22);
String ClientValue = byteConvertObj(String.class, this.data);//客户端传入的过滤内容
String[] split = ClientValue.split(",");
if (substring1.contains(split[0]) && substring2.contains(split[1])) {//是否需要过滤
return 0;//选择
} else {
return 1;//过滤
}
}
return 1;//过滤
}
11.将这个项目打成jar架包放入hbase根目录中的lib下
选中之后自动打包成jar
将这个架包发送到hbase的lib目录中,重启hbase
12. 使用自定义类查询结果
代码如下
hbase通过网关访问即thrift2 <hbase_home>/bin/hbase thrift2/thrift start 启动
以上是关于hbase自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章