以下是 **HBase Shell** 的常用命令总结,涵盖表管理、数据操作和常用工具,适合快速查阅和日常使用:
---
### **1. 进入与退出 HBase Shell**
```bash
# 进入 HBase Shell(确保 HBase 服务已启动)
hbase shell
# 退出 Shell
exit
# 或按 Ctrl + D
```
---
### **2. 表管理命令**
#### **创建表**
```bash
# 语法:create '表名', '列族1', '列族2', ...
create 'user', 'info', 'contact'
```
#### **列出所有表**
```bash
list
```
#### **查看表结构**
```bash
describe 'user'
```
#### **禁用/启用表**
```bash
disable 'user' # 禁用表(删除或修改表前需禁用)
enable 'user' # 启用表
```
#### **删除表**
```bash
disable 'user' # 先禁用
drop 'user' # 再删除
```
#### **检查表状态**
```bash
is_enabled 'user'
is_disabled 'user'
```
---
### **3. 数据操作命令**
#### **插入/更新数据**
```bash
# 语法:put '表名', '行键', '列族:列名', '值'
put 'user', '001', 'info:name', 'Alice'
put 'user', '001', 'contact:email', 'alice@example.com'
```
#### **查询单行数据**
```bash
get 'user', '001'
```
#### **扫描全表数据**
```bash
scan 'user'
```
#### **带条件扫描**
```bash
# 限制返回行数
scan 'user', {LIMIT => 5}
# 过滤特定列族或列
scan 'user', {COLUMNS => ['info:name']}
# 按行键范围扫描(左闭右开)
scan 'user', {STARTROW => '001', STOPROW => '005'}
```
#### **删除数据**
```bash
# 删除某列
delete 'user', '001', 'contact:email'
# 删除整行
deleteall 'user', '001'
```
---
### **4. 高级操作**
#### **统计表行数**
```bash
count 'user', {INTERVAL => 1000} # 每处理 1000 行显示进度
```
#### **清空表数据**
```bash
truncate 'user' # 自动禁用、删除并重建表
```
#### **过滤器查询**
```bash
# 查询值等于 'Alice' 的行
scan 'user', FILTER => "ValueFilter(=, 'binary:Alice')"
# 查询列名包含 'name' 的列
scan 'user', FILTER => "ColumnPrefixFilter('name')"
```
---
### **5. 命名空间管理**
#### **创建命名空间**
```bash
create_namespace 'test_ns'
```
#### **在命名空间下创建表**
```bash
create 'test_ns:user', 'info'
```
#### **列出所有命名空间**
```bash
list_namespace
```
---
### **6. 权限管理**
#### **授予用户权限**
```bash
grant 'user', 'RWXCA', 'user' # 权限:Read, Write, eXecute, Create, Admin
```
#### **查看权限**
```bash
user_permission 'user'
```
---
### **7. 工具命令**
#### **查看 HBase 状态**
```bash
status
```
#### **查看集群版本**
```bash
version
```
#### **查看帮助**
```bash
help '命令名' # 如 help 'create'
```
---
### **注意事项**
1. **列族设计**:列族需在创建表时定义,后续不可动态修改。
2. **行键设计**:行键是数据分布的核心,影响查询性能。
3. **批量操作**:频繁单行操作效率低,建议使用 HBase API 批量处理。
4. **时间戳**:插入数据时可指定时间戳,默认为系统时间。
---
### **常见问题**
#### **Q1: 执行命令报错 `TableNotFoundException`**
- 检查表名是否拼写正确。
- 确认表是否被禁用(需先启用)。
#### **Q2: 数据更新后未生效**
- HBase 数据最终一致,强制刷新可使用:
```bash
flush 'user'
```
#### **Q3: 如何导出/导入数据?**
- 使用 `export` 和 `import` 工具(需退出 Shell 执行):
```bash
# 导出表数据
hbase org.apache.hadoop.hbase.mapreduce.Export 'user' /path/to/export
# 导入数据
hbase org.apache.hadoop.hbase.mapreduce.Import 'user' /path/to/import
```
---
掌握这些命令后,您可以通过 HBase Shell 完成大多数日常管理和调试任务!对于复杂操作(如大规模导入),建议使用 HBase API 或工具(如 Spark、Hive)。