Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍

离线数据分析平台实战——090HBase shell客户端和Java Api介绍

HBase 命令介绍

HBase命令主要分为两大类,
第一类是指操作hbase表的相关的shell命令;
第二类是提供hbase其他相关服务的命令。
第一类命令全部在hbase shell命令中,
第二类命令主要以thrift/thrift2等服务为主。

Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍_第1张图片
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命令

作用:

创建命名空间。

示例:
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'

Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍_第2张图片
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'

Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍_第3张图片
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命令如下:ColumnPrefixFilterMultipleColumnPrefixFilterRowFilterSingleColumnValueFilterSingleColumnValueExcludeFilter等。
需要注意的是:
在指定的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的相关环境变量信息即可。

代码如下:

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的线程池对象。

你可能感兴趣的:(Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍)