什么是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

相关推荐
m0_527034331 小时前
异步任务审核系统设计:消息队列、超时重试与失败补偿
java·大数据·开发语言
Shawn Dev2 小时前
MySQL Binlog 数据误删除恢复完全指南
数据库·mysql·elasticsearch
oradh2 小时前
Oracle ADRCI 诊断数据工具总结
数据库·oracle·adrci
zzzll11112 小时前
Loop Engineering:循环工程的原理、实践与应用
java·数据库·python
只说证事2 小时前
大数据专业考研还是考证比较好
大数据·考研
IpdataCloud2 小时前
IPv6查出来的地理位置是错的?技术解析与双栈定位方案
数据库·tcp/ip·ip
用户3610588626122 小时前
Spark 核心之 Spark-SortShufflebypass 原理深度剖析
大数据·spark
数字新视界2 小时前
信创动环监控厂家深入剖析智能机房环境监控技术应用与挑战
服务器·数据库·物联网·芯片·动环监控系统
羑悻的小杀马特2 小时前
打破深海垄断:国产数据库如何托起固井软件的“数据心脏”?
数据库
今天AI了吗2 小时前
从 LLM 到 Agent Skill:把 AI 底层概念串起来
数据库·人工智能·sql·深度学习·神经网络·算法·机器学习