第三章 Hbase
05 Hbase过滤器
1 | 可以根据主键、列簇、列、版本等更多的条件来对数据进行过滤。 |
1 | hbase(main):011:0> show_filters |
1 | 过滤器语法格式: |

RowFilter
1 | RowFilter:针对rowkey进行字符串的比较过滤器。 |
PrefixFilter
1 | PrefixFilter:rowkey前缀比较器,一种更简单的比较行键前缀的命令,等值比较。 |
KeyOnlyFilter
1 | KeyOnlyFilter: |

FirstKeyOnlyFilter
1 | FirstKeyOnlyFilter:只扫描相同键的第一个cell,其键值对都会显示出来。 |
InclusiveStopFilter
1 | InclusiveStopFilter:替代ENDROW返回终止条件行; |

总结

FamilyFilter
1 | FamilyFilter:针对列族进行比较和过滤。 |

QualifierFilter
1 | QualifierFilter:列标识过滤器。 |

ColumnPrefixFilter
1 | ColumnPrefixFilter:对列名前缀进行过滤。 |
1 | MultipleColumnPrefixFilter:可以指定多个前缀 |
1 | 例3:显示列名为name和age的记录; |
ColumnRangeFilter
1 | ColumnRangeFilter :设置范围按字典序对列名进行过滤; |

TimestampsFilter
1 | TimestampsFilter :时间戳过滤器。支持等值方式比较,但可以设置多个时间戳 |
1 | hbase(main):030:0> scan 'student',FILTER=>"TimestampsFilter(2,4)" |
ValueFilter
1 | ValueFilter :值过滤器。 |
SingleColumnValueFilter
1 | SingleColumnValueFilter:在指定的列族和列中进行值过滤器。 |
ColumnCountGetFilter
1 | ColumnCountGetFilter:限制每个逻辑行返回的键值对数 |
PageFilter
1 | PageFilter :基于行的分页过滤器,设置返回行数。 |
ColumnPaginationFilter
1 | ColumnPaginationFilter:基于列的进行分页过滤器,需要设置偏移量与返回数量 。 |
1 | hbase(main):006:0> scan 'student' |
1 | hbase(main):007:0> scan 'student',FILTER=>"ColumnPaginationFilter(2,1)" |
1 | 003 column=grades:bigdata, timestamp=1541485412686, value=80 003 column=grades:englisg, timestamp=1541485328260, value=90 003 column=grades:math, timestamp=1541485368087, value=80 003 column=stuinfo:age, timestamp=1541485209410, value=19 003 column=stuinfo:class, timestamp=1541485271479, value=1803 003 column=stuinfo:name, timestamp=1541485198223, value=harry 003 column=stuinfo:sex, timestamp=1541485253075, value=male 004 column=stuinfo:age, timestamp=2, value=19 004 column=stuinfo:name, timestamp=2, value=curry 004 column=stuinfo:sex, timestamp=4, value=male |
组合使用过滤器
1 | 组合使用过滤器:使用AND或OR等连接符,组合多个过滤器进行组合扫描。 |
1 | 例10:组合过滤器的使用 |
总结
1 | FamilyFilter:针对列族进行比较和过滤。 |
06 Hbase Java编程方法

1 | 首先介绍基于JAVA的编程方法,HBase是基于java语言开发,用户可以利用包含java语言在内的多种语言进行调用开发。由于java是原生语言,因此利用java进行应用开发,以及过滤器等内容的开发最为方便。 |
包导入
1 | 使用Hadoop和HBase的环境配置 |
1 | 工程目录src下新建类文件,在java文件中import需要的HBase包,比如HBase的环境配置包需要导入Configuration包(对应显示红色) |
建立连接
1 | public static Configuration conf; |
1 | 环境配置好后,接下来开始连接数据库,在分布式环境下,客户端访问HBase需要通过ZooKeeper的地址和端口来获取当前活跃的Master和所需的RegionServer地址, |
Admin接口

1 | 接下来具体看下HBase API中常用的接口 ,首先是Admin接口,Admin用于管理HBase数据库的表信息,如创建表,用到了createtable,删除表用到disabletable和deletetable,与Hbase中的create,delete和disable命令对应。另外admin接口还可以使用listtables方法列出hbase中所有的表,使用getTableDescriptor来获取表的结构信息,分别于hbase shell中的,list 和describe命令。 |
创建和删除表

1 | 接着通过具体代码来看下Admin接口提供的方法的使用。首先是创建表,在创建表之前用tablesexists来判断表是否存在,注意设定tableName对象的语法,使用valueOf方法设置表名。如果表已经存在则使用disableTable和deleteTable方法来删除表,注意这里与hbaseshell中操作一样,先禁用表再删除表(红框)。 |
Table接口

1 | 再来看下另一个接口Table,如果不需要创建表,直接插入数据,可以不用建立Admin对象,使用Table接口即可。Table接口主要用来进行数据的操作,比如删除指定行使用delete,获取指定行的数据使用get,以及向表中添加数据使用put方法。 |
Put数据更新
1 | public static void addData() throws IOException { |
1 | Put put1 = new Put(Bytes.toBytes("002")); |
1 | 首先来看下put方法,put主要用来插入,也可以对已有的记录进行更新,在使用put方法前,需要根据表名建立和它的连接(红色行) |
查询数据-Get
1 | public static void getRow(String tableName, String rowKey) throws IOException { |
1 | 插入数据后,可以根据行键进行查询,比如get方法,此代码中,先建立连接,通过get对象描述查询条件,再通过table.get方法进行实际查询(紫色两行)。查询结构写入result中,由于get方法一次获取一个逻辑行,即可能包含多个键值对,因此查询结构通过循环的方法将逐个键值对输出显示。 |
查询数据-Scan
1 | public static void scanTable(String tableName) throws IOException { |
1 | Scan的操作语法与get类似,都需要建立连接,描述查询条件,再进行实际查询,核心语句是table.getScanner,后续的显示页和之前代码基本相同,但是,由于scan的结果得到的多个逻辑行,且每个逻辑行包含多个键值对,因此采用二层循环的方式来显示每一个键值对的内容,(红框所示)。 |
删除行和列
1 | Table table = connection.getTable(TableName.valueOf(tableName)); |
1 | 完成了数据的新增和查询,Hbase api也提供删除数据,可以指定行键,列族和列进行删除, |