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

2018-04-08 11:13:28 浏览数 (1)

离线数据分析平台实战——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命令如下: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的相关环境变量信息即可。

代码如下:

代码语言: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的线程池对象。

0 人点赞