什么是HBase?它和Hive有什么区别?

一、HBase 是干什么的

1. 先对比 Hive,区分两者定位

Hive:离线大数据仓库,存日志、订单批量数据,只能做批量统计查询,不能实时根据某一条 ID 快速查数据;

HBase:分布式实时 NoSQL 数据库,底层依然跑 HDFS 存数据,依赖 ZooKeeper 做集群协调 / 主节点选举,主打单行毫秒级实时读写。

例子:

整个校园百万学生的一卡通数据:

  1. Hive:每月导出全部消费日志,统计全校人均消费、食堂营收(批量离线分析)
  2. HBase:学生刷完卡立刻写入,输入学号就能1 毫秒查出该学生全部刷卡记录(实时单点查询)

2. HBase 三大核心作用

海量存储:底层依托 HDFS,存十亿、百亿条数据无压力;

实时读写:按主键单行极速查、改、删,适合实时业务;

分布式高可用:依赖 ZK 自动切换 HMaster 主节点,主节点宕机集群不瘫痪。

二、案例演示

示例表设计:card_info 一卡通消费表

行键 rowkey:学号(001/002...,唯一主键,快速检索)

列族 1:base 基础信息(姓名、班级)

列族 2:pay 消费记录(消费窗口、金额、时间)

步骤 1:三台全部启动 HBase

hadoop1执行主启动命令,一键全集群启动

bash 复制代码
start-hbase.sh

三台分别用jps验证进程

bash 复制代码
jps

hadoop1:多出 HMaster + HRegionServer

hadoop2/hadoop3:只有 HRegionServer

底层原理(关联 ZK)

HBase 启动时自动连接 ZK,注册 HMaster 为主控制器,所有 RegionServer 向 ZK 上报心跳。ZooKeeper 负责 HBase 主节点选举,这也是安装 HBase 前必须装好 ZK 的根本原因。

步骤 2:进入 HBase Shell 交互控制台

bash 复制代码
hbase shell

步骤 3:建表

创建一卡通表,两个列族base、pay

bash 复制代码
create 'card_info','base','pay'

向 ZK 写入这条表的元数据:表名、列族、分片规则;

HMaster 分配数据分片(Region)给三台 RegionServer;

HDFS 自动创建专属存储目录 /hbase/data/default/card_info,未来所有数据存在这里。

步骤 4:插入多条测试数据

bash 复制代码
# 学号001,基础信息

put 'card_info','001','base:name','John'

put 'card_info','001','base:class','2301'

# 001消费记录

put 'card_info','001','pay:shop','water'

put 'card_info','001','pay:money','6'

put 'card_info','001','pay:time','12:18'



# 学号002数据

put 'card_info','002','base:name','Marry'

put 'card_info','002','pay:money','15'

|-------------|---------------|------------|------------|
| Row Key | Timestamp | Column Family ||
| Row Key | Timestamp | base | pay |
| 001 | t5 | | time=12:18 |
| 001 | t4 | | money=6 |
| 001 | t3 | | shop=water |
| 001 | t2 | Class=2301 | |
| 001 | t1 | name=John | |
| 002 | t6 | | money=15 |
| 002 | t5 | name=Marry | |

put 语法格式

put '表名','行键rowkey','列族:列名','值'

底层存储逻辑

数据不会存在 HBase 软件本身,直接持久化到 HDFS 分布式块中,ZK 只记录表结构、分片位置。

步骤 5:实时单行查

bash 复制代码
# 只查学号001全部信息,毫秒返回

get 'card_info','001'

对比:

如果用 Hive 查:百万条日志全扫描,跑 MapReduce,几十秒出结果;

HBase:按学号 rowkey 精准定位分片,毫秒拿到数据,实时业务必备。

步骤 6:全表扫描

bash 复制代码
# 查看所有表

list

# 打印card_info全表数据

scan 'card_info'

步骤 7:删除单条消费记录、删除整行、删除表

bash 复制代码
# 删除001的消费金额字段

delete 'card_info','001','pay:money'

# 删除学号002整行所有数据

deleteall 'card_info','002'

# 禁用表后才能删除

disable 'card_info'

drop 'card_info'

步骤 8:去 HDFS 看真实数据

bash 复制代码
hdfs dfs -ls /hbase/data/default/

现象:能看到card_info文件夹,表真实数据全部在 HDFS,HBase 只是读写中间件,和 Hive 逻辑统一。

三、区分 Hive & HBase

相关推荐
howdoyoudo2026063 小时前
AI审计手记 #28:从“暂停训练”到“切断联网”——AI安全控制手段的极限升级
大数据·人工智能·安全·ai·语言模型
AIgorithmGEEK7 小时前
MySQL 索引全解(下):建、查、删实战与知识速查表
数据库·mysql·b+树·索引
曦夜日长8 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
阿明副业观察8 小时前
2026年免费AI视频生成工具功能深度解析:有无水印、中文语音及商业用途考量
大数据·人工智能·ai作画·aigc·音视频·ai写作
唠点键盘之外的10 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
云和恩墨10 小时前
数据库监控简史:监控不止于告警——从图表大爆发到健康管理闭环
数据库
ly768910 小时前
MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界
数据库·mongodb·事务·分片集群·快照隔离·写冲突
豆角焖肉10 小时前
Spring AOP 自定义注解实现系统操作日志
数据库·自定义注解·springaop·操作日志·aop 切面
2601_9627809110 小时前
2027校招准备:统计学专业如何用数据能力应聘企业经营管理管培生
大数据