HBase 练习¶
一、基础环境与通用命令¶
用于HBase Shell终端的进入退出、帮助查询、集群基础信息查看等通用操作。
| 命令语法 | 核心功能说明 | 标准使用示例 |
|---|---|---|
hbase shell |
进入HBase交互式命令行终端 | hbase shell |
help / help '命令名' |
查看所有命令清单,或指定命令的详细用法、参数说明 | help 'create' |
exit / quit |
退出HBase Shell交互终端 | exit |
status / status '级别' |
查看集群运行状态,支持simple/summary/detailed三个详情级别 |
status 'detailed' |
version |
查看当前HBase的版本信息 | version |
whoami |
查看当前登录HBase的用户及权限信息 | whoami |
练习¶
启动HBase Shell¶
查看HBase版本¶
2.0.5, rUnknown, Thu Jun 18 15:10:52 CST 2020
集群状态¶
1 active master, 0 backup masters, 3 servers, 0 dead, 17.6667 average load
创建Teacher表,包含一个列族Info¶
二、表结构DDL操作命令¶
用于HBase表的创建、修改、禁用/启用、删除等表结构定义操作,是表生命周期管理的核心命令。
| 命令语法 | 核心功能说明 | 标准使用示例 |
|---|---|---|
create '表名', '列族1', '列族2', ... create '命名空间:表名', {NAME => '列族名', 属性 => 值} |
创建HBase表,必须指定至少一个列族,支持自定义列族版本数、TTL、压缩算法等属性 | 极简版:create 'user', 'info', 'contact' 高级版: create 'ns_business:order', {NAME => 'detail', VERSIONS => 3, TTL => 2592000} |
list |
列出default默认命名空间下的所有用户表 | list |
describe '表名' / desc '表名' |
查看表的完整结构,包括列族配置、属性、预分区信息 | desc 'user' |
exists '表名' |
判断指定表是否存在于集群中 | exists 'user' |
disable '表名' |
禁用表(修改表结构、删除表前必须先执行禁用) | disable 'user' |
enable '表名' |
启用被禁用的表,恢复读写能力 | enable 'user' |
is_disabled '表名' / is_enabled '表名' |
查看表当前的禁用/启用状态 | is_disabled 'user' |
alter '表名', {NAME => '列族名', 属性 => 新值} |
修改表或列族的配置,支持新增/删除列族、修改版本数、TTL、压缩规则等 | alter 'user', {NAME => 'info', VERSIONS => 5} |
drop '表名' |
删除表,仅能删除已禁用的表 | drop 'user' |
truncate '表名' |
清空表全量数据,自动执行「禁用→删除→重建表」,会丢失原表的预分区配置 | truncate 'user' |
truncate_preserve '表名' |
清空表全量数据,同时保留原表的预分区配置 | truncate_preserve 'order' |
练习¶
创建Student表¶
两个列族Info和Score:
-
列族
Info的数据在读取时关闭缓存BLOCKCACHE。 -
列族
Score内的数据保留2个版本VERSIONS
BLOCKCACHE 是 HBase 的读缓存,作用是把刚读取过的数据块缓存在内存里,下次读相同数据直接从内存取,不用读磁盘,提升读速度。
查看Student表结构¶
查看HBase中已有的表¶
禁用表Teacher¶
判断表Teacher是否被禁用¶
删除表Teacher¶
判断表Teacher是否还存在¶
Table Teacher does not exist
修改Student表,列族Score 内的数据保留3个版本¶
查看表结构,验证是否修改成功。
修改Student表,增加一个列族hobby¶
查看表结构,验证是否修改成功。
修改Student表,删除列族hobby¶
查看表结构,验证是否修改成功。
三、数据读写DML操作命令¶
用于单行数据的写入、查询、删除操作,是HBase数据读写的核心基础命令。
| 命令语法 | 核心功能说明 | 标准使用示例 |
|---|---|---|
put '表名', '行键RowKey', '列族:列名', '值' [, 时间戳] |
写入/更新一个单元格数据,重复对同一单元格执行put为更新操作 | put 'user', '001', 'info:name', '张三' |
get '表名', '行键' [, {COLUMNS => ['列族:列名'], VERSIONS => 版本数}] |
查询指定RowKey的整行数据,也可指定列、返回历史版本数精准查询 | 全行查询:get 'user', '001' 精准查询: get 'user', '001', {COLUMNS => ['info:name'], VERSIONS => 3} |
delete '表名', '行键', '列族:列名' [, 时间戳] |
删除指定列的单个/指定版本数据,不会删除整行 | delete 'user', '001', 'info:age' |
deleteall '表名', '行键' |
删除指定RowKey的整行所有列数据 | deleteall 'user', '001' |
四、数据扫描与统计操作命令¶
用于范围扫描、全表扫描、行数统计等批量数据查询与统计操作,支持丰富的过滤条件。
| 命令语法 | 核心功能说明 | 标准使用示例 |
|---|---|---|
scan '表名' |
全表扫描,返回表中所有数据 | scan 'user' |
scan '表名', {COLUMNS => ['列族:列名1', '列族:列名2']} |
扫描并仅返回指定列的数据 | scan 'user', {COLUMNS => ['info:name', 'contact:phone']} |
scan '表名', {STARTROW => '起始行键', STOPROW => '终止行键'} |
按行键范围扫描,规则为左闭右开 | scan 'user', {STARTROW => '001', STOPROW => '010'} |
scan '表名', {LIMIT => 行数} |
限制扫描返回的行数,避免全表扫描溢出 | scan 'user', {LIMIT => 5} |
scan '表名', {VERSIONS => 版本数} |
扫描并返回数据的多个历史版本 | scan 'user', {VERSIONS => 3} |
scan '表名', {TIMERANGE => [起始时间戳, 终止时间戳]} |
按数据写入的时间戳范围扫描 | scan 'user', {TIMERANGE => [1713542400000, 1713628800000]} |
count '表名' [, CACHE => 缓存行数] |
统计表的总行数,大表场景建议设置CACHE提升扫描速度 | count 'user', CACHE => 1000 |
期末考试数据读写¶
将以下同学的期末考试成绩存入Student表,然后查询全表。