HBase Shell命令行终端

本文介绍了HBase的两种访问方式,重点讲解了HBase Shell,包括如何进入Shell环境,常用操作命令如创建、删除和修改表,以及如何使用过滤器进行数据筛选。此外,还提到了SQL on HBase的三种实现方式:Phoenix on HBase、Hive on HBase和Spark on HBase。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7.1 HBase的访问方式和HBase Shell

本节先介绍HBase访问方式,包括HBase提供的访问方式和SQL on HBase访问方式。再重点介绍HBase Shell命令行终端,包括如何进入HBase Shell终端环境,如何查看HBase Shell提供的常用操作命令。

7.1.1HBase的访问方式

1.HBase自身提供的访问方式

HBase属于典型的NoSQL非关系型数据库,不支持标准的SQL查询,但自身提供多种方式对数据库表进行访问和操作。HBase常见的数据库表访问方式如表7-1所示:

表7-1 HBase常见的数据库表访问方式

访问方式

简要说明

HBase Shell

对HBase数据库表进行访问操作的简单命令行终端

Native Java API

使用Java API编程接口对HBase数据库表进行高效的访问操作

Thirft Gateway

利用Thirft序列化技术,支持C++、Python等多种编程语言,适用于其他异构系统在线访问HBase

REST Gateway

支持REST风格的Http API访问HBase,不受编程语言限制

MapReduce

可直接使用MapReduce作业处理HBase数据,或通过Pig/Hive间接使用MapReduce处理HBase数据

其中HBase Shell是HBase最简单的访问方式,适合对HBase数据库表的管理和使用。MySQL用标准结构化查询语言SQL来操作结构化数据,Hive也有类SQL的HQL(Hive SQL)对存储在HDFS的数据进行操作。然而HBase并没有提供原生的SQL,不能执行select和insert/delete/update等标准SQL语句。HBase的HBase Shell命令行终端提供了类似Linux Shell终端命令的一系列操作命令,可通过执行HBase Shell命令对HBase数据库进行操作。

2.SQL on HBase的访问方式

从诞生开始HBase一直关注分布式系统的扩展性、容错性、读写性能优化等NOSQL特性,首要解决大数据存取和实时读写的问题,因此提供简单Get/Put/Scan接口命令即可满足用户的使用要求。随着HBase的发展成熟,应该功能更强大、操作更容易,因此也应该支持标准SQL语言。HBase不仅要支持SQL语言语法,也要满足SQL相关的数据处理方式和处理能力,实现NoSQL到NewSQL的进化。HBase本身不支持对原生数据表的标准SQL操作。如需使用标准SQL操作HBase,可采用SQL on HBase的方式将带标准SQL的上层框架与HBase集成,以使HBase支持标准SQL。常见的SQL on HBase方式有Phoenix on HBase、Hive on HBase和Spark on HBase等。

1)Phoenix on HBase

Phoenix是一种专门针对HBase设计的支持标准SQL的查询引擎,可通过SQL方式操作HBase。Phoenix on HBase是Phoenix和HBase的集成。在Phoenix中执行create语句创建表时,会自动调用HBase Java API在HBase创建对应的数据表。在Phoenix中执行insert语句向表中插入数据时,会自动调用HBase Java API在对应的HBase表中写入数据。

2)Hive on HBase

Hive是基于Hadoop的数据仓库工具,也可以成为为一种自带标准SQL的上层框架,可通过Hive on HBase方式操作HBase。Hive on HBase实质上是利用MapReduce on HBase实现的。HBase提供了MapReduce Java API编程接口MapReduce on HBase,可以编写MapReduce程序来操作HBase。Hive on HBase通过MapReduce on HBase,利用HBase数据表做为MapReduce的数据输入或者输出,利用MapReduce并行计算能力来操作HBase的数据表。

3)Spark on HBase

Spark和HBase都是Hadoop大数据生态系统的流行组件。Spark是基于内存的分布式计算框架。Spark on HBase是Spark和HBase的集成,可同时具备OLAP的功能和OLTP的功能。Spark on HBase使得用户无需关心Spark RDD与HBase的交互细节,能更方便地应用Spark带来的批、流处理等能力。Spark on HBase的常见应用场景如下:

(1)HBase作为数据存储,通过Spark执行流式数据计算

(2)HBase作为数据存储,通过Spark执行大规模的DAG图计算

(3)通过Spark对HBase进行BulkLoad批量数据导入操作

(4)通过Spark SQL对HBase进行交互式数据分析

7.1.2 HBase Shell命令行终端

1.进入HBase Shell终端环境

HBase Shell是由Apache HBase官方提供的Shell命令行操作接口,是一个基于Ruby脚本语言的终端环境。利用HBase Shell用户可以方便地执行终端命令来操作HBase,进行HBase数据表的创建、删除和修改,列出表信息,读取表数据,插入表数据,删除表数据等操作。

进入HBase shell终端环境之前,要先在Linux Shell命令行终端执行start-dfs.sh 脚本启动HDFS,再执行start-hbase 脚本启动HBase。如果Linux系统已配置HBase环境变量,可直接在Linux Shell命令行终端执行hbase shell脚本命令,即可进入HBase Shell的命令行终端环境。Hbase脚本文件位于HBase安装目录的bin子目录。执行hbase shell命令的部分输出结果如下:

[root@hbase ~]# hbase shell

... ...

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 1.2.0-cdh5.7.0, rUnknown, Wed Mar 23 11:46:29 PDT 2016

hbase(main):001:0>

成功进入HBase Shell终端环境后,会出现hbase(main):000:0>提示符,可在提示符后输入要执行的命令并回车执行。如果直接回车或输入命令后回车,提示符中的数字序号会依次递增,数字序号初始值是001。终端输出结果如下:

hbase(main):001:0> list

hbase(main):002:0>

hbase(main):003:0*

hbase(main):004:0*

hbase(main):005:0*

在HBase Shell终端输入单、双引号或其他特殊字符(非字母数字)并回车后,终端提示符形态会发生改变,具体含义如表7-2所示:

表7-2 HBase SHell终端提示符形态说明

输入字符内容

终端提示符形态

终端提示符表示含义

输入非数字、字符其他特殊字符

hbase(main):021:0*

表示未输入完整的操作命令,等待继续输入

输入单引号字符

hbase(main):000:0’

表示输入命令中的单引号没有成对出现

输入双引号字符

hbase(main):000:0”

表示输入命令中的双引号没有成对出现

输入一条完整命令

hbase(main):000:0>

表示上一条命令已执行完,等待输入下一条命令

需要注意HBase Shell不支持中文,输入全角字符会导致HBase Shell终端出错退出。还需注意HBase Shell终端默认不支持BackSpace键(只支持Delete键),对命令输入造成不便。XShell等远程终端工具提供对键盘的Delete键和BackSpace键的键序列设置。只需将BackSpace键序列设为’ACSII 127’即可让HBase Shell终端的BackSpace键生效。如图7-1所示:

图7-1 让HBase Shell终端的BackSpace键生效的方法

2.HBase Shell操作命令分组

HBase Shell的帮助命令help给出了所有操作命令的快速参考说明。熟练掌握help命令可以快速了解HBase Shell提供的所有操作命令分组并学习各种命令的用法。在HBase Shell终端输入help命令会输出HBase Shell所有操作命令的分组,如表7-3所示:

表7-3 help命令输出HBase Shell所有操作命令的分组

分组名称

分组说明

包含的操作命令

general

常规命令

status, table_help,version, whoami

ddl

数据表定义命令

alter,alter_async,alter_status,create,describe,disable,disable_all,drop,drop_all,enable,enable_all,exists,get_table,is_disabled, is_enabled, list locate_region, show_filters

dml

表数据操作命令

append,count,delete,deleteall,get,get_counter,get_splits,incr,put,scan,

truncate,truncate_preserve

namespace

名字空间命令

alter_namespace,create_namespace,describe_namespace,drop_namespace, list_namespace, list_namespace_tables

tools

工具命令

assign,balance_switch,balancer,balancer_enabled,catalogjanitor_enabled,catalogjanitor_run,catalogjanitor_switch,close_region,compact,compact_mob,compact_rs,flush,major_compact,major_compact_mob,merge_region,move,normalize,normalizer_enabled,normalizer_switch,split,trace,unassign,wal_roll,zk_dump

replication

HBase集群复制命令

add_peer,append_peer_tableCFs,disable_peer,disable_table_replication,enable_peer,enable_table_replication,list_peers,list_replicated_tables,remove_peer,remove_peer_tableCFs,set_peer_tableCFs,show_peer_tableCFs

snapshots

快照命令

clone_snapshot,delete_all_snapshot,delete_snapshot,list_snapshots,restore_snapshot,snapshot

configuration

配置命令

update_all_config,update_config

quotas

资源配额命令

list_quotas,set_quota

security

安全命令

grant, list_security_capabilities,revoke,user_permission

procedures

过程命令

abort_procedure,list_procedures

visibility labels

可视化标签命令

add_labels,clear_auths,get_auths,list_labels,set_auths,set_visibility

HBase Shell自带命令操作提示,输入命令名称后HBase Shell会自动提示该命令的完整用法。另外,由于HBase Shell实际是基于Ruby实现,理论上可以运行任何Ruby脚本代码,而非局限于只能执行上述help命令显示的所有操作命令。

HBase Shell的操作命令分组包括有general分组、ddl分组、dml分组和namesapce分组等。其中常用的DDL分组和DML分组的含义如下:

1)DDL分组

DDL代表数据定义语言(Data Definition Language),用于定义数据表的结构模式。DDL分组的操作命令都是针对数据表结构的操作。HBase提供的常用DDL命令有alter(修改表)、create(创建表)、describe(描述表)、drop(删除表)、list(列出所有表)等。

2)DML分组

DML代表数据操纵语言(Data Manipulation Language),用于对数据表中的数据进行操作。DML分组的操作命令都是针对数据表数据的操作。HBase提供的常用DML命令有scan(表扫描)、get(读数据)、put(写数据),delete(删除数据)等,

7.2 HBase Shell命令行的基础操作命令

本节主要介绍HBase Shell命令行的各种基础操作命令的用法格式、用法说明和用法示例,应能熟练掌握HBase Shell命令行的基础操作命令。

7.2.1 DDL分组的操作命令

DDL分组中包含的操作命令很多,主要用于对HBase数据库表的相关管理操作,主要包括创建表、修改表、删除表、列出表、启用表、禁用表等操作。DDL分组中常用操作命令说明和用法示例如表7-4所示:

表7-4 DDL分组中操作命令说明和用法示例

命令名称

命令说明

用法示例

alter

修改表列族的属性

alter 't1', NAME => 'f1', VERSIONS => 5

alter_async

异步修改表列族的属性,无需等待所有region都完成模式(列族属性)更新

alter_async 't1', NAME => 'f1', VERSIONS => 5

alter_status

获取alter命令的执行状态,表明已有多少region已完成模式(列族属性)更新

alter_status 't1'

create

创建一张数据表

create 't1', 'f1', 'f2', 'f3'

describe

描述一张数据表的列族属性及该表是否禁用

describe 't1'

disable

启动一张数据表的禁用

disable 't1'

disable_all

禁用匹配正则表达式的所有数据表

disable_all 't.*'

drop

删除一张数据表,删除前必须先禁用该表

drop 't1'

drop_all

删除匹配正则表达式的所有数据表

drop_all 't.*'

enable

启动一张数据表的使用

enable 't1'

enable_all

启用匹配正则表达式的所有数据表

enable_all 't.*'

exists

判断一张数据表是否存在

exists 't1'

is_disabled

判断一张数据表是否禁用

is_disabled 't1'

is_enabled

判断一张数据表是否可用

is_enabled 't1'

list

列出所有的数据表名称(default名字空间和自定义名字空间)

list

locate_region

显示指定表名、行键的某个region存放在哪个RegionServer

locate_region 'tableName', 'key0'

show_filters

列出HBase中所有的过滤器

show_filters

需要注意的是,HBase Shell命令中的表达式与其他语言不同,特别是列族符号的使用比较特殊。列族中的=>符号表示“等于”,例如NAME => 'f1'表示列族名等于f1。字符串必须用单引号或双引号,例如 't1'或“t1”表示列族t1。引用列族的多个属性需要用花括号,例如{NAME => 'f1', VERSIONS => 5}。

下面对DDL分组中的常用操作命令进行详细介绍。

  1. list命令

list是列出数据表命令。进入HBase shell后可以先执行list命令列出HBase当前所有数据表的表名。

用法格式:list

用法说明:列出默认名字空间default和自定义名字空间中的所有数据表,命令后面不跟任何参数。

用法示例:默认名字空间default和自定义名字空间中的所有数据表

HBase Shell终端输入list后按回车键,输出结果如下:

TABLE   

t1   

t2   

2 row(s) in 0.0140 seconds

=> ["t1", "t2"]

说明:TABLE后面的每行字符串t1和t2都是表名,2 row(s)是所列出的所有表的数量。list命令实际是对元数据表hbase:meta表进行查询。元数据表存放HBase所有数据表的元数据信息。另外,HBase当前没有自定义名字空间。

  1. exists命令

exists是表存在判断命令,用于判断指定表名的数据表是否存在。

用法格式1:exists 't1'

用法说明:判断默认名字空间default中是否存在表名为t1的数据表

用法格式2:exists 'ns1:t1'

用法说明:判断指定名字空间 ns1中是否存在表名为t1的数据表

用法示例:判断表t1是否存在

HBase Shell终端执行exists 't1'命令,输出结果如下:

Table t1 does exist   

0 row(s) in 0.0750 seconds

说明:默认名字空间default中存在表名为't1的数据表。

  1. describe命令

describe是表属性描述命令,主要描述HBase表和列族的属性,可以缩写为desc。

用法格式1:describe 't1'或desc 't1'

用法说明:描述默认名字空间defaut中的数据表t1的列族属性

用法格式2:describe 'ns1:t1'或desc 'ns1:t1'

用法说明:描述指定名字空间 ns1中的的数据表t1的列族属性;

用法示例:描述表t1的列族属性

HBase shell终端执行describe t1desc t1命令,输出结果如下:

Table t1 is ENABLED

t1  

COLUMN FAMILIES DESCRIPTION   

{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0',

{NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}  

{NAME => 'f3', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

3 row(s) in 0.0970 seconds

说明:依次显示每个列族的属性信息;第1行提示表t1已启用;第2行显示表名t1;从第3行开始在依次描述表t1的每个列族的属性信息,表t1划分为三个列族f1、f2和f3;列族的属性列表包含在花括号中,列族属性格式是”属性名=>属性值”,=>相当于等于号;由于表t1属于默认名字空间default,执行descibe 't1'命令和 descibe 'default:t1'命令效果相同。

HBase表的列族是预先定义的,物理上是互相分离的。在各种应用场景中,经常为了提升HBase集群性能而进行性能调优,而HBase表列族中的多个属性都可用于性能调优。

HBase表列族中的常用属性如表7-5所示:

表7-5 HBase表列族中的的常用属性

列族属性

含义

NAME

列族名称

BLOOMFILTER

布隆过滤器

VERSIONS

列值的最大版本数量

MIN_VERSIONS

列值保留的最小版本数量

DATA_BLOCK_ENCODING

是否进行数据块编码

IN_MEMORY

数据是否优先存于内存中

BLOCKCACHE

是否开启数据块缓存

BLOCKSIZE

HBASE默认数据块大小

TTL

列族中数据的生存时间

COMPRESSION

列族中数据的压缩方式

KEEP_DELETED_CELLS

是否保留删除的单元格

  1. create命令

create是创建表命令,用于创建一张新的数据表。在HBase Shell终端只输入create后按回车,会提示create命令的各种用法。create命令用法比较复杂,可先掌握其简单常见用法。

用法格式1:create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}

用法说明:在默认名字空间default创建表名t1的包含3个列族f1,f2和f3的数据表;这是标准用法,简化用法格式是create ‘t1’, ‘f1’, ‘f2’’, ‘f3’

用法格式2:create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}

用法说明:在指定名字空间 ns1中创建表名为t1的数据表,包含1个名字为f1的列族,并指定单元格值的最大版本数为5

用法示例1:在默认名字空间创建students表

在HBase shell终端执行create 'students' , 'info'命令,输出结果如下:

0 row(s) in 1.4260 seconds

=> Hbase::Table - students

说明:第1行提示创建表命令的执行时长;第2行提示创建完成的数据表的表名。students表用于保存学生的基本信息和成绩信息。info列族用于保存学生姓名、年龄、性别等基本信息。

执行create命令创建表时,必须指定至少一个列族;只指定表名而无列族名,终端会提示用法错误。create命令执行完成后可执行list命令查看新建的表students;还可执行desc 'students'命令查看新创建表students的列族属性,只显示一个列族info。

执行list命令输出结果如下:

TABLE   

students  

t1  

t2    

3 row(s) in 0.0250 seconds

=> ["students", "t1", "t2"]

执行desc students命令输出结果如下:

Table students is ENABLED  

students   

COLUMN FAMILIES DESCRIPTION    

{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}     

1 row(s) in 0.0540 seconds

list命令可以查看新建的students表是否存在,desc命令可以查看info列族属性信息。

用法示例2:创建名字空间ns1

HBase shell终端依次执行命令create_namespace 'ns1',输出结果如下:

hbase(main):026:0> create_namespace 'ns1'

0 row(s) in 0.0530 seconds

hbase(main):027:0> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}

0 row(s) in 1.2900 seconds

=> Hbase::Table - ns1:t1

用法示例3:在ns1名字空间创建t1表,包含一个列族f1,设置最大版本数5

HBase shell终端依次执行create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}、listdesc 'ns1:t1'命令输出结果如下:

hbase(main):023:0> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}

0 row(s) in 1.2650 seconds

hbase(main):028:0> list

TABLE  

ns1:t1   

students  

t1   

t2  

4 row(s) in 0.0210 seconds

=> ["ns1:t1", "students", "t1", "t2"]

hbase(main):029:0> desc 'ns1:t1'

Table ns1:t1 is ENABLED  

ns1:t1  

COLUMN FAMILIES DESCRIPTION  

{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '5', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

1 row(s) in 0.0470 seconds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值