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