HBase 过滤器

系统环境
Linux Ubuntu 16.04

jdk-7u75-linux-x64

hbase-1.0.0-cdh5.4.5

hadoop-2.6.0-cdh5.4.5

hadoop-2.6.0-eclipse-cdh5.4.5.jar

eclipse-java-juno-SR2-linux-gtk-x86_64

任务内容
1.创建一个自定义过滤器,过滤出特定列族,特定列,特定值。

2.创建一个前缀过滤器,使其可以过滤出带有特定前缀的数据。

任务步骤
1.在Linux本地新建/data/hbase3目录。

view plain copy
mkdir -p /data/hbase3
切换到/data/hbase3目录下,使用wget命令,下载http://192.168.1.100:60000/allfiles/hbase3中的文件。

view plain copy
cd /data/hbase3
wget http://192.168.1.100:60000/allfiles/hbase3/hbaselib.tar.gz
wget http://192.168.1.100:60000/allfiles/hbase3/order_items
将hbaselib.tar.gz解压到当前目录下。

view plain copy
tar -xzvf hbaselib.tar.gz
2.检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。

view plain copy
jps
cd /apps/hadoop/sbin
./start-all.sh
当Hadoop相关进程启动后,进入/apps/hbase/bin目录下,启动HBase服务。

view plain copy
cd /apps/hbase/bin/
./start-hbase.sh
最后,启动hbase shell,进入命令行模式。

view plain copy
hbase shell

3.在HBase中为某电商创建一个订单明细表,名为order_items,包含两个列族,名为ID和price,ID列族内包含‘item’和‘order’两个列,price列族内包含‘shop’和‘goods’两个列。

view plain copy
create ‘order_items’,‘ID’,‘price’

4.向order_items表中插入数据, 10001~10007为行键(rowkey)。

view plain copy
put ‘order_items’,‘10001’,‘ID:item’,‘252604’
put ‘order_items’,‘10002’,‘ID:order’,‘252607’
put ‘order_items’,‘10003’,‘ID:order’,‘252610’
put ‘order_items’,‘10004’,‘price:shop’,‘8.8’
put ‘order_items’,‘10005’,‘price:goods’,‘11’
put ‘order_items’,‘10006’,‘price:shop’,‘13’
put ‘order_items’,‘row-10007’,‘price:goods’,‘3’

插入完成后,用scan命令查看order_items内数据。

view plain copy
scan ‘order_items’

5.编写Java代码,用于创建HBase的过滤器。

新建project项目,项目名为hbase3。

在hbase3项目下新建包,包名为my.hbase。

在my.hbase包下新建类,类名为HBase。

加载项目所需的依赖包,右键项目名,新建一个目录hbase3lib,用于存放项目所需的jar包。

将linux上/data/hbase3目录下,hbaselib目录中的jar包,全部拷贝到Eclipse中hbase3项目的hbase3lib目录里。

选中hbase3项目中hbase3lib目录下所有的jar包,在jar包上单击右键,并依次点击Build Path=>Add to Build Path。

这样就将依赖包加载到项目里了。

编写程序代码如下,应用于order_items表,过滤出’price’列族,过滤出‘shop’列,过滤出值为’13‘的数据。

view plain copy
package my.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.QualifierFilter;
import org.apache.hadoop.hbase.filter.FamilyFilter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class HBase {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, “order_items”);
List filters = new ArrayList();
Filter famFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(“price”)));
filters.add(famFilter);
Filter colFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(“shop”)));
filters.add(colFilter);
Filter valFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(“13”)));
filters.add(valFilter);
FilterList fl = new FilterList( FilterList.Operator.MUST_PASS_ALL, filters);
Scan scan = new Scan();
scan.setFilter(fl);
ResultScanner scanner = table.getScanner(scan);
System.out.println("Scanning table… ");
for (Result result : scanner) {
//System.out.println(“getRow:”+Bytes.toString(result.getRow()));
for (KeyValue kv : result.raw()) {
//System.out.println("Family - "+Bytes.toString(kv.getFamily()));
//System.out.println("Qualifier - “+Bytes.toString(kv.getQualifier() ));
System.out.println(“kv:”+kv +”, Key: " + Bytes.toString(kv.getRow()) +
", Value: " +Bytes.toString(kv.getValue()));
}
}
scanner.close();
System.out.println("Completed ");
}
}
6.在HBase类文件中,右键并点击=>Run As=>Run on Hadoop选项,将任务提交到Hadoop中。

待执行完毕后,在Console界面查看实验结果如下:

结果正确,此过滤器应用于order_items表,famFilter为列族过滤器,此处过滤出’price’列族,colFilter为列过滤器,此处过滤出‘shop’列,valFilter为值过滤器,此处过滤出值为’13‘的数据。

前缀过滤器(PrefixFilter)

7.编写Java代码,创建前缀过滤器(PrefixFilter),用于筛选出前缀为row的数据。

在my.hbase包下新建类,类名为Prffilter。

程序代码:

view plain copy
package my.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class Prffilter {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, “order_items”);
Filter filter = new PrefixFilter(Bytes.toBytes(“row”));
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);
System.out.println("Scanning table… ");
for (Result result : scanner) {
//System.out.println(“getRow:”+Bytes.toString(result.getRow()));
for (KeyValue kv : result.raw()) {
//System.out.println("Family - "+Bytes.toString(kv.getFamily()));
//System.out.println("Qualifier - “+Bytes.toString(kv.getQualifier() ));
System.out.println(“kv:”+kv +”, Key: " + Bytes.toString(kv.getRow()) +
", Value: " +Bytes.toString(kv.getValue()));
}
}
scanner.close();
System.out.println("Completed ");
}
}
8.在Prffilter类文件中,右键并点击=>Run As=>Run on Hadoop选项,将任务提交到Hadoop中。

待执行完毕后,在Console界面查看实验结果如下:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值