7.7日 HBase实验

发布于:2025-07-10 ⋅ 阅读:(23) ⋅ 点赞:(0)

实验目标

  • 掌握HBase命名空间的创建与管理
  • 理解HBase表结构和列族设计
  • 练习HBase数据的CRUD操作(增删改查)
  • 掌握表结构修改和版本控制配置
  • 学会使用扫描(scan)和获取(get)操作

实验步骤

HBase服务安装

1. 准备HBase环境

# 启动HBase Shell环境
hbase shell

# 检查集群状态(保留命令)
status

2. 创建命名空间

# TODO:创建名为"userapp_cust_ns"的命名空间
# 提示:
# 1. 使用create_namespace命令
# 2. 命名空间名称用单引号包裹

3. 创建数据表

# 保留:在默认命名空间创建系统监控表
create 'sysmon_userapp', 'metrics'

# TODO:在userapp_cust_ns命名空间中创建客户信息表
# 要求:
# - 表名:customer_info
# - 包含两个列族:personal_info和contact_info

操作命令

hbase(main):003:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 2.0000 average load
hbase(main):020:0* create_namespace 'userapp_cust_ns'
Took 0.3474 seconds                                                                       
hbase(main):021:0> create 'sysmon_userapp', 'metrics'
Created table sysmon_userapp
Took 0.9248 seconds                                                                       
=> Hbase::Table - sysmon_userapp
hbase(main):022:0> desc 'sysmon_userapp'
Table sysmon_userapp is ENABLED                                                           
sysmon_userapp                                                                            
COLUMN FAMILIES DESCRIPTION                                                               
{NAME => 'metrics', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIO
R => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_EN
CODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFI
LTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRIT
E => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'tr
ue', BLOCKSIZE => '65536'}                                                                
1 row(s)
Took 0.2160 seconds                                                                       
hbase(main):023:0> 
hbase(main):024:0* create 'userapp_cust_ns:customer_info','personal_info','contact_info'
Created table userapp_cust_ns:customer_info
Took 1.2994 seconds                                                                       
=> Hbase::Table - userapp_cust_ns:customer_info

4. 插入客户数据

# TODO:插入客户ID为'cust1'的数据
# 要求:
# 1. 姓名(Li Bai)保存到personal_info:name
# 2. 手机号(123-456-7890)保存到contact_info:phone
# 3. 地址(123 Main St...)保存到contact_info:address
# 4. 使用put命令,注意行键和列限定符格式

# TODO:插入客户cust2的数据
# 提示:使用put命令,指定完整表名(含命名空间)和行键
# 要求:
# 1. 姓名(Wang Wei)保存到personal_info:name
# 2. 手机号(098-765-4321)保存到contact_info:phone
hbase(main):014:0> put 'userapp_cust_ns:customer_info', 'cust1', 'personal_info:name', 'Li Bai'
Took 0.1149 seconds                                                                                                                                                              
hbase(main):015:0> put 'userapp_cust_ns:customer_info', 'cust1', 'contact_info:phone', '123-456-7890'
Took 0.0172 seconds                                                                                                                                                              
hbase(main):016:0> put 'userapp_cust_ns:customer_info', 'cust1', 'contact_info:address', '123 Main St...'
Took 0.0156 seconds                                                                                                                                                              
hbase(main):017:0> get 'userapp_cust_ns:customer_info', 'cust1'
COLUMN                                        CELL                                                                                                                               
 contact_info:address                         timestamp=1751854477618, value=123 Main St...                                                                                      
 contact_info:phone                           timestamp=1751854473578, value=123-456-7890                                                                                        
 personal_info:name                           timestamp=1751854473532, value=Li Bai                                                                                              
1 row(s)
Took 0.0785 seconds                                                                                                                                                              
hbase(main):018:0> put 'userapp_cust_ns:customer_info', 'cust2', 'personal_info:name', 'Wang Wei'
Took 0.0183 seconds                                                                                                                                                              
hbase(main):019:0> put 'userapp_cust_ns:customer_info', 'cust2', 'contact_info:phone', '098-765-4321'
Took 0.0082 seconds                                                                                                                                                              
hbase(main):020:0> get 'userapp_cust_ns:customer_info', 'cust2'
COLUMN                                        CELL                                                                                                                               
 contact_info:phone                           timestamp=1751854581470, value=098-765-4321                                                                                        
 personal_info:name                           timestamp=1751854580165, value=Wang Wei                                                                                            
1 row(s)
Took 0.0130 seconds                  

5. 查询客户信息

# TODO:查询客户ID为'cust1'的所有信息
# 提示:使用get命令,指定完整表名(含命名空间)和行键

# 扫描全表 
# 提示:使用scan命令,指定完整表名(含命名空间)
hbase(main):021:0> scan 'userapp_cust_ns:customer_info'

6. 更新客户数据

# TODO:更新cust1的手机号为111-222-3333
# 提示:
# 1. 使用put命令覆盖原有数据
# 2. 指定相同的行键和列限定符
put 'userapp_cust_ns:customer_info', 'cust1', 'contact_info:phone', '111-222-3333'

说明:

  1. HBase的更新本质上是写入新版本的数据,旧版本数据仍然保留(根据版本设置保留)

  2. 默认情况下会保留1个版本,可以通过describe命令查看表的VERSIONS设置

  3. 如果需要读取历史版本数据,可以使用:

get 'userapp_cust_ns:customer_info', 'cust1', {COLUMN => 'contact_info:phone', VERSIONS => 2}

当前列族版本配置

  1. contact_info 列族VERSIONS => '1'

  2. personal_info 列族VERSIONS => '1'

这表示:

  • 每个单元格(cell)默认只保留最新1个版本的数据

  • 当你更新数据时,旧版本会被新版本直接覆盖(无法回溯历史值)

如果需要查看多个历史版本(比如修改记录),需要修改列族的 VERSIONS 属性:

7. 修改表结构

# TODO:为表添加additional_info列族
# 要求:
# - 列族名称:additional_info
# - 保留3个版本数据
# 提示:使用alter命令和NAME/VERSIONS参数
# 首先禁用表(修改表结构前必须禁用)
disable 'userapp_cust_ns:customer_info'

# 添加新的列族,设置VERSIONS=3
alter 'userapp_cust_ns:customer_info', {NAME => 'additional_info', VERSIONS => 3}

# 重新启用表
enable 'userapp_cust_ns:customer_info'

8. 删除客户数据

# TODO:删除客户ID为'cust2'的所有数据
# 提示:使用deleteall命令,指定完整的表名和行键

9. 特殊操作处理

# TODO:解释truncate操作的功能及实现方法
# 要求:
# 1. 不直接提供truncate命令
# 2. 描述其作用相当于哪两个操作的组合(需要两个步骤)
# 3. 在下方空白处写出完整解决方案


网站公告

今日签到

点亮在社区的每一天
去签到