离线数据分析平台实战——090HBase shell客户端和Java Api介绍
HBase 命令介绍
HBase命令主要分为两大类, 第一类是指操作hbase表的相关的shell命令; 第二类是提供hbase其他相关服务的命令。 第一类命令全部在hbase shell命令中, 第二类命令主要以thrift/thrift2等服务为主。
image.png
HBase Shell命令介绍
HBase的Shell命令是以JRuby为核心编写的, 主要分为DDL和DML两大类, 除此两类之外还有一起其他的命令运维相关的命令, 比如snapshots等。 当我们进入hbase的shell命令客户端的时候,我们可以通过help命令查看帮助信息,也可以通过help命令查看具体命令的使用方法。
status命令
作用:查看hbase集群状态信息。 参数:simple,summary,detailed;默认是summary。
image.png
命名空间相关命令
作用:
类似关系型数据库中的database,作用是将hbase的表按照业务作用分割开,有益于维护。 Hbase默认有两个命名空间,分别是hbase和default。其中hbase命名空间存储hbase自身的表信息,default存储用户创建的表。
命令:
create_namespace(创建命名空间), alter_namespace(命名空间修改), describe_namespace(显示命名空间描述信息), drop_namespace(删除命名空间), list_namespace(显示所有命名空间), list_namespace_tables(显示对于命名空间中的table名称)。
namespace相关命令
create_namespace命令
作用:
创建命名空间。
示例:
代码语言:javascript复制create_namespace 'bigdater', {'comment'=>'this is ourself namespace','keyname'=>'valuename'}
image.png
drop_namespace命令
作用:
删除指定命名空间;注意删除的命名空间内不能有table存在,也就是说只能删除空的namespace。
示例:
drop_namespace 'bigdater'
image.png
describe_namespace命令
作用:显示命名空间的相关信息。 示例:describe_namespace 'bigdater'
image.png
list_namespace命令
作用:显示所有存在的命名空间。 示例:list_namespace或者list_namespace 'regex_str'
image.png
list命令
作用: 显示hbase表名称,类似mysql中的show tables; 可以通过指定命名空间来查看对应命名空间中的表,默认是显示所有用户表,也支持模糊匹配。 类似命令list_namespace_tables查看对应命名空间内有那些表。
创建hbase用户表
命令格式:
create '[namespace_name:]table_name', 'family_name_1',....'family_name_n'
如果不给定namespace的名称,默认创建在default命名空间中。
示例:
create 'bigdater:test','f'
image.png
删除用户表
删除用户表之前需要将表设置为disable的,然后才可以删除。其实在hbase中如果需要对已有表进行ddl操作,均需要将其disable,在ddl操作完成后,再进行enable操作即可。
命令格式:
disable '[namespace_name:]table_name'
drop '[namespace_name:]table_name'
示例:
disable 'bigdater:test'
drop 'bigdater:test'
image.png
put命令
在默认命名空间中创建users表,然后在这个表的基础上进行操作。 hbase的put命令是进行数据添加的命令。
命令格式:
put '[namespace_name:]table_name', 'rowkey', 'family:[column]', 'value' [, timestamp] [, {ATTRIBUTES=>{'mykey'=>'myvalue'}, VISIBILITY=>'PRIVATE|SECRET'}]
示例:put 'users','row1','f:id','1'
get命令
get命令的作用是获取对应表中对应rowkey的数据。
默认获取最新版本的全部列数据,可以通过时间戳指定版本信息,也可以指定获取的列。
命令格式:
get '[namespace_name:]table_name', 'rowkey'
示例:get 'users','row1'
scan命令
scan命令是hbase的另外一种检索方式,是通过范围查找hbase中的数据。
默认情况下是获取table的全部数据,可以通过指定column和filter等相关信息进行数据的过滤。
命令格式:
scan '[namespace_name:]table_name'
示例:scan 'users'
scan-filter相关命令
scan提供多种filter命令,常用filter命令如下:ColumnPrefixFilter
,MultipleColumnPrefixFilter
,RowFilter
,SingleColumnValueFilter
,SingleColumnValueExcludeFilter
等。
需要注意的是:
在指定的value之前需要加'binary:',比如:
scan 'users',{FILTER=>"SingleColumnValueFilter('f','id',=,'binary:1)"}
scan其他参数
scan命令除了使用filter外,我们还可以定义我们需要的column,开始扫描的rowkey,结束扫描的rowkey,获取行数等信息。
eg:
scan 'users', {COLUMN=>['f:id','f:name']}
scan 'users', {STARTROW=>'row1',ENDROW=>'row2'}
scan 'users', {LIMIT=>1}
count命令
count命令是统计hbase表行数的一个命令,由于相当于一个内置的mapreduce程序,所以当数据量比较大的时候可以选择使用协处理器方式计算行数。
命令格式:
count '[namespace:]table_name' [INTERVAL => 1000,] [CACHE => 10]
默认情况下INTERVAL是1000(间隔数),CACHE是10。
delete命令
delete命令是删除指定table的指定rowkey的指定列,也就是说delete命令适合删除列的情况。
命令格式:
delete '[namespace:]table_name', 'rowkey', 'family:column'
如果需要删除当然rowkey的所有列数据,那么可以使用deleteall命令。
truncate命令
truncate命令的作用是清空数据库,当我们数据库中的数据比较多的时候,我们可以选择该命令将数据库清空。
命令格式: truncate '[namespace_name:]table_name'
Java客户端
Java客户端其实就是shell客户端的一种实现,操作命令基本上就是shell客户端命令的一个映射。 Java客户端使用的配置信息是被映射到一个HBaseConfiguration的实例对象中的,当使用该类的create方法创建实例对象的时候,会从classpath路径下获取hbase-site.xml文件并进行配置文件内容的读取,同时会读取hadoop的配置文件信息。 也可以通过java代码指定命令信息,只需要给定zk的相关环境变量信息即可。
代码如下:
代码语言:javascript复制Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "hh");
HBaseAdmin
HBaseAdmin类是主要进行DDL操作相关的一个接口类,主要包括命名空间管理,用户表管理。 通过该接口我们可以创建、删除、获取用户表,也可以进行用户表的分割、紧缩等操作。
Put,Get,Scan,Delete
Put类是专门提供插入数据的类。 Get类是专门提供根据rowkey获取数据的类。 Scan是专门进行范围查找的类。 Delete是专门进行删除的类。
HBase连接池
在web应用中,如果我们之间使用HTable来操作hbase,那么在创建连接和关闭连接的时候,一定会浪费资源。 那么HBase提供了一个连接池的基础,主要涉及到的类和接口包括:HConnection,HConnectionManager,HTableInterface,ExecutorService四个。 其中HConnection就是hbase封装好的hbase连接池,HConnectionManager是管理连接池的一个类,HTableInterface是在类HTable的基础上进行的一个接口抽象。 ExecutorService是jdk的线程池对象。