HBase修改表 #
一、修改表概述 #
HBase允许修改表的结构和属性,包括添加/删除列族、修改列族属性、修改表属性等。
1.1 修改表流程 #
text
修改表流程
├── 1. 禁用表(部分操作需要)
├── 2. 执行修改操作
├── 3. 重新启用表
└── 4. 验证修改结果
1.2 需要禁用的操作 #
text
需要禁用表的操作
├── 添加列族
├── 删除列族
├── 修改列族属性
└── 修改表属性
不需要禁用的操作
└── 无(HBase 2.x后部分操作可在线执行)
二、禁用与启用表 #
2.1 禁用表 #
ruby
# 禁用表
disable 'user'
# 检查是否禁用
is_disabled 'user'
# 禁用多个表
disable_all 'user.*'
2.2 启用表 #
ruby
# 启用表
enable 'user'
# 检查是否启用
is_enabled 'user'
# 启用多个表
enable_all 'user.*'
2.3 禁用/启用状态 #
ruby
# 查看表状态
describe 'user'
# 输出包含状态信息
# Table user is ENABLED
# 或
# Table user is DISABLED
三、添加列族 #
3.1 添加列族语法 #
ruby
# 基本语法
alter '表名', NAME => '新列族名'
# 带属性添加
alter '表名', NAME => '新列族名', VERSIONS => 3
3.2 添加列族示例 #
ruby
# 禁用表
disable 'user'
# 添加列族
alter 'user', NAME => 'address'
# 添加带属性的列族
alter 'user', NAME => 'history', VERSIONS => 10, TTL => 2592000
# 启用表
enable 'user'
# 验证
describe 'user'
3.3 添加列族注意事项 #
text
注意事项
├── 表必须先禁用(HBase 1.x)
├── HBase 2.x支持在线添加
├── 新列族初始为空
└── 添加后可立即使用
四、删除列族 #
4.1 删除列族语法 #
ruby
# 语法
alter '表名', NAME => '列族名', METHOD => 'delete'
# 或使用简化语法
alter '表名', 'delete' => '列族名'
4.2 删除列族示例 #
ruby
# 禁用表
disable 'user'
# 删除列族
alter 'user', NAME => 'address', METHOD => 'delete'
# 或简化写法
alter 'user', 'delete' => 'address'
# 启用表
enable 'user'
# 验证
describe 'user'
4.3 删除列族注意事项 #
text
注意事项
├── 表必须先禁用
├── 删除列族会删除所有数据
├── 操作不可逆
├── 不能删除最后一个列族
└── 删除后空间不会立即释放(需Major Compaction)
五、修改列族属性 #
5.1 修改列族属性语法 #
ruby
# 语法
alter '表名', NAME => '列族名', 属性名 => 新值
# 示例:修改版本数
alter 'user', NAME => 'info', VERSIONS => 5
5.2 修改版本数 #
ruby
# 禁用表
disable 'user'
# 修改版本数
alter 'user', NAME => 'info', VERSIONS => 5
# 启用表
enable 'user'
# 验证
describe 'user'
5.3 修改TTL #
ruby
# 修改TTL为30天
alter 'user', NAME => 'history', TTL => 2592000
# 修改TTL为永不过期
alter 'user', NAME => 'history', TTL => FOREVER
5.4 修改压缩算法 #
ruby
# 修改压缩算法
alter 'user', NAME => 'info', COMPRESSION => 'SNAPPY'
# 注意:需要执行Major Compaction使压缩生效
major_compact 'user'
5.5 修改布隆过滤器 #
ruby
# 修改布隆过滤器类型
alter 'user', NAME => 'info', BLOOMFILTER => 'ROWCOL'
5.6 修改块大小 #
ruby
# 修改HFile块大小
alter 'user', NAME => 'info', BLOCKSIZE => 131072 # 128KB
5.7 修改块缓存 #
ruby
# 禁用块缓存
alter 'user', NAME => 'info', BLOCKCACHE => false
# 启用块缓存
alter 'user', NAME => 'info', BLOCKCACHE => true
5.8 修改内存优先级 #
ruby
# 设置常驻内存
alter 'user', NAME => 'info', IN_MEMORY => true
# 取消常驻内存
alter 'user', NAME => 'info', IN_MEMORY => false
六、修改表属性 #
6.1 修改Region最大大小 #
ruby
# 修改Region最大大小为20GB
alter 'user', MAX_FILESIZE => '21474836480'
# 查看当前设置
describe 'user'
6.2 修改只读属性 #
ruby
# 设置为只读
alter 'user', READONLY => true
# 取消只读
alter 'user', READONLY => false
6.3 修改Region副本数 #
ruby
# 设置Region副本数
alter 'user', REGION_REPLICATION => 2
6.4 修改配置属性 #
ruby
# 修改表级配置
alter 'user', CONFIGURATION => {'hbase.hregion.max.filesize' => '21474836480'}
七、批量修改 #
7.1 同时修改多个属性 #
ruby
# 禁用表
disable 'user'
# 同时修改多个列族属性
alter 'user',
{NAME => 'info', VERSIONS => 5, COMPRESSION => 'SNAPPY'},
{NAME => 'history', VERSIONS => 10, TTL => 2592000}
# 启用表
enable 'user'
7.2 修改多个列族 #
ruby
# 修改多个列族的压缩算法
alter 'user',
{NAME => 'info', COMPRESSION => 'SNAPPY'},
{NAME => 'history', COMPRESSION => 'SNAPPY'},
{NAME => 'settings', COMPRESSION => 'SNAPPY'}
八、修改表示例 #
8.1 用户表修改 #
ruby
# 原始表结构
# create 'user', 'info'
# 禁用表
disable 'user'
# 添加新列族
alter 'user', NAME => 'settings'
alter 'user', NAME => 'history', VERSIONS => 10
# 修改info列族属性
alter 'user', NAME => 'info', VERSIONS => 3, COMPRESSION => 'SNAPPY'
# 启用表
enable 'user'
# 验证
describe 'user'
8.2 日志表修改 #
ruby
# 原始表结构
# create 'log', 'data'
# 禁用表
disable 'log'
# 修改TTL为7天
alter 'log', NAME => 'data', TTL => 604800
# 添加压缩
alter 'log', NAME => 'data', COMPRESSION => 'SNAPPY'
# 启用表
enable 'log'
# 执行Major Compaction使压缩生效
major_compact 'log'
8.3 订单表修改 #
ruby
# 原始表结构
# create 'order', 'detail'
# 禁用表
disable 'order'
# 添加商品列族
alter 'order', NAME => 'items', COMPRESSION => 'SNAPPY'
# 修改detail列族
alter 'order', NAME => 'detail', VERSIONS => 1, BLOOMFILTER => 'ROW'
# 启用表
enable 'order'
九、验证修改 #
9.1 查看表结构 #
ruby
# 查看表结构
describe 'user'
# 输出示例
Table user is ENABLED
user, {TABLE_ATTRIBUTES => {MAX_FILESIZE => '10737418240', ...}
COLUMN FAMILIES DESCRIPTION
{NAME => 'history', BLOOMFILTER => 'ROW', VERSIONS => '10', ...}
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '3', ...}
{NAME => 'settings', BLOOMFILTER => 'ROW', VERSIONS => '1', ...}
9.2 检查列族 #
ruby
# 查看表结构中的列族信息
describe 'user'
# 关注输出中的 COLUMN FAMILIES DESCRIPTION 部分
9.3 测试修改效果 #
ruby
# 测试版本数修改
put 'user', 'test', 'info:name', 'value1'
put 'user', 'test', 'info:name', 'value2'
put 'user', 'test', 'info:name', 'value3'
put 'user', 'test', 'info:name', 'value4'
put 'user', 'test', 'info:name', 'value5'
# 查询所有版本(应该返回5个版本)
get 'user', 'test', {COLUMN => 'info:name', VERSIONS => 10}
十、常见问题 #
10.1 表未禁用 #
ruby
# 错误:Table is enabled
# 解决:先禁用表
disable 'user'
alter 'user', NAME => 'info', VERSIONS => 5
enable 'user'
10.2 列族不存在 #
ruby
# 错误:Column family does not exist
# 解决:检查列族名称
describe 'user' # 查看现有列族
10.3 删除最后一个列族 #
ruby
# 错误:Cannot remove last column family
# 解决:至少保留一个列族
# 如果需要清空表结构,建议删除表重建
disable 'user'
drop 'user'
create 'user', 'new_cf'
10.4 压缩未生效 #
ruby
# 问题:修改压缩算法后,旧数据未压缩
# 解决:执行Major Compaction
major_compact 'user'
十一、最佳实践 #
11.1 修改前备份 #
ruby
# 修改前建议备份表结构
describe 'user'
# 或导出表结构
echo "describe 'user'" | hbase shell > user_schema.txt
11.2 低峰期修改 #
text
修改建议
├── 在业务低峰期执行修改
├── Major Compaction消耗资源,避免高峰执行
└── 大表修改需评估影响
11.3 测试验证 #
text
验证步骤
├── 修改后在测试环境验证
├── 检查表结构是否正确
├── 测试读写功能
└── 监控性能指标
十二、总结 #
本节介绍了HBase修改表:
| 操作 | 语法 |
|---|---|
| 添加列族 | alter ‘表’, NAME => ‘cf’ |
| 删除列族 | alter ‘表’, ‘delete’ => ‘cf’ |
| 修改版本数 | alter ‘表’, NAME => ‘cf’, VERSIONS => n |
| 修改TTL | alter ‘表’, NAME => ‘cf’, TTL => seconds |
| 修改压缩 | alter ‘表’, NAME => ‘cf’, COMPRESSION => ‘type’ |
| 修改表属性 | alter ‘表’, PROPERTY => value |
下一步,让我们学习删除表!
最后更新:2026-03-27