
📖 资源简介
最近有朋友问【尚硅谷】大数据技术之HBase – 带源码课件的学习资料,正好手头有一套比较完整的,就整理出来分享给大家。
✨ 资源亮点
- 内容扎实:50节视频课程,跟着老师一步步操作,比自学摸索快得多。
- 配套齐全:源码、课件、工具都打包好了(共1个压缩包),下载就能直接用。
- 带源码课件:不是纯视频录像,配套的源代码和PPT都在,方便对照学习和二次修改。
📚 课程内容
课程大纲
课程按”入门 → Shell → 原理 → Java API → MR/Hive 集成 → 调优 → 项目实战”的主线组织,共 50 节视频:
- 视频
资源清单
| 类型 | 数量 |
|---|---|
| 视频教程 | 50 节 |
| 压缩文件 | 1 个 |
| 合计 | 51 |
深入理解 HBase:从原理到实战
为什么要学 HBase
在大数据体系里,HDFS 解决了”海量数据怎么存”,MapReduce/Spark 解决了”海量数据怎么算”,但它们都没有解决一个关键问题:当数据量涨到 PB 级、单机数据库根本扛不住时,如何对单行数据做到毫秒级随机读写? MySQL 分库分表有路由成本、扩容笨重,ES 更擅长检索而非高写入吞吐,而 HBase 正是为”写得进、查得出、扩得动“这三个目标设计的分布式 NoSQL 数据库。它底层跑在 HDFS 上,天然继承了 HDFS 的多副本容错与水平扩展能力,非常适合订单明细、用户画像、消息轨迹、物联网时序等”写入量大、按主键点查多”的场景。
HBase 与 RDBMS 的核心差异
| 对比项 | RDBMS(MySQL 等) | HBase |
|---|---|---|
| 数据模型 | 面向行、固定 Schema | 面向列族、Schema 稀疏 |
| 扩展方式 | 垂直扩展为主 | 水平扩展(Region 分裂) |
| 主键查询 | 走 B+Tree 索引 | RowKey 字典序 + Region 定位 |
| 事务 | 支持跨行 ACID | 只保证单行行级事务 |
| 适合场景 | 强一致、复杂 Join、OLTP | 海量写入、随机点查、宽表 |
一句话总结:HBase 不是用来替代 MySQL 的,而是用来承接 MySQL 扛不住的那部分超大规模写入与点查流量。
数据模型:理解五个核心概念
- Table:逻辑上的表,物理上按 Region 切分。
- Row Key:行的唯一标识,按字典序排序存储,是 HBase 唯一的”索引”。
- Column Family(列族):列的物理分组,建表时必须显式声明,是存储和权限控制的最小单位。
- Column Qualifier(列限定符):列族下的具体列,可以动态添加,不需要预先定义。
- Cell(单元格):由 RowKey + Column Family + Column Qualifier + Timestamp 唯一定位的一个值,天然带版本。
RowKey: user-1001
├── info:name → "Tom" (timestamp=1700000001)
├── info:age → "28" (timestamp=1700000001)
└── order:20240101 → "199.00" (timestamp=1700000002)
架构:四大角色各司其职
- HMaster:管理表与 Region 元数据(建表、删表、Region 分配),不参与实际数据读写。
- RegionServer:真正干活的节点,负责 client 的读写请求,管理本地的 Region。
- Region:表的横向切分单元,一张表初始可能只有 1 个 Region,数据涨上来后自动分裂。
- ZooKeeper:存放
hbase:meta元数据的入口、HMaster 选主、RegionServer 心跳。 - HDFS:最终的文件存储层,HFile 落在 HDFS 上,天然三副本。
读写流程:HBase 的灵魂
写流程(课程第 12 节重点):
- Client 先查 ZooKeeper 拿到
hbase:meta,再定位到目标 RowKey 所在 Region 的 RegionServer。 - 写请求先顺序写 WAL(Write-Ahead Log),防止宕机丢数据。
- 再写入内存中的 MemStore(按列族一份),写完成即返回 ACK。
- 当 MemStore 达到阈值(默认 128MB),Flush 成一个 HFile 落 HDFS。
读流程(课程第 11 节重点):
- 先查 BlockCache(读缓存,LRU),命中直接返回。
- 再查 MemStore(内存里可能还有没 Flush 的新数据)。
- 最后到 HFile 中查找,依靠 HFile 顶层的 BlockIndex 快速定位。
这套”写 WAL + 写内存 + 顺序落盘”的设计,是 HBase 能做到高吞吐写入的根本原因。
RowKey 设计:决定你用得好不好
RowKey 是 HBase 唯一的索引,设计错了,整个集群都会被热点打穿。核心原则:
- 散列:避免时间戳、自增 ID 这类单调递增字段直接做 RowKey,否则所有写入都集中在最后一个 Region 上(热点问题)。常见做法是加盐(Salting)、哈希反转。
- 长度适中:RowKey 会被每个 HFile 索引、每个 Cell 重复存储,太长浪费空间,建议 10~100 字节。
- 预分区:建表时就按预估的 RowKey 区间切好 Region,避免初期单 Region 被打爆。
# 预分区:按十六进制前缀切 8 个 Region

create 'user', 'info', {NUMREGIONS => 8, SPLITALGO => 'HexStringSplit'}
Shell 常用命令速查
# 建表:列族 info

create 'user', 'info'
# 写入:行键 row1,列族 info,列名 name

put 'user', 'row1', 'info:name', 'Tom'
put 'user', 'row1', 'info:age', '28'
# 按行键精确查

get 'user', 'row1'
# 扫描整表(生产环境慎用,建议加 STARTROW/STOPROW 或 Filter)

scan 'user', {LIMIT => 10}
# 删除某个列

delete 'user', 'row1', 'info:age'
# 删表必须先 disable

disable 'user'
drop 'user'
Java API 最小示例
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "zk1:2181,zk2:2181");
try (Connection conn = ConnectionFactory.createConnection(conf);
Table table = conn.getTable(TableName.valueOf("user"))) {
Put put = new Put(Bytes.toBytes("row1"));
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("Tom"));
table.put(put);
Get get = new Get(Bytes.toBytes("row1"));
Result result = table.get(get);
String name = Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")));
System.out.println("name = " + name);
}
Compaction 与 Region 分裂
- Minor Compaction:把相邻的若干小 HFile 合并成一个,减轻读放大,速度快、不停机。
- Major Compaction:把一个 Region 下一个列族的所有 HFile 合并成一个,同时清理被标记删除的 Cell,资源消耗大,通常放在凌晨调度。
- Region 分裂:当 Region 大小超过
hbase.hregion.max.filesize(默认 10GB),自动按中间 RowKey 一分为二,HMaster 把新 Region 迁移到其他 RegionServer 实现负载均衡。
与 Hive / Spark 集成
课程后半段讲的 Hive × HBase 集成非常实用:在 Hive 中建一张外部表映射到 HBase 表,就能用 Hive SQL 直接分析 HBase 里的海量数据,弥补 HBase 不擅长复杂分析的短板。生产上常见分工是:HBase 扛在线点查,Spark/Hive 扛离线批量分析,两边通过 HDFS 上的公共存储交换数据。
学习路线与章节导读
按课程大纲,可以分成五个阶段循序渐进:
| 阶段 | 对应节次 | 学习目标 |
|---|---|---|
| 入门 | 01~06 | 理解 HBase 定位、架构,完成单机/伪分布式安装 |
| 操作 | 07~14 | 熟练 Shell,吃透数据模型与读写原理 |
| API | 15~22 | 能用 Java 完成建表、增删改查、扫描 |
| 集成 | 23~32 | MR 读写 HBase、Hive 映射外部表 |
| 调优+实战 | 33~50 | 高可用、预分区、RowKey 设计、谷粒微博项目 |
高频面试要点
- HBase 为什么写入快? 因为写 WAL + 写 MemStore 是内存操作,真正落 HFile 是顺序写,比随机写快几个数量级。
- 什么是 HBase 的热点问题?怎么解决? 自增 RowKey 导致新数据全打到最后一个 Region;用盐值、哈希、反转、预分区打散。
- Flush、Compact、Split 分别是什么? MemStore 写满刷成 HFile 叫 Flush;HFile 合并叫 Compact;Region 过大拆分叫 Split。
- HBase 适合存图片吗? 不适合,小文件问题严重,图片应放 HDFS/HDFS 类对象存储,HBase 只存元数据。
常见踩坑与最佳实践
- RowKey 不要用时间戳开头:会造成写入热点,常见做法是”用户ID哈希 + 时间戳”。
- 列族数量越少越好:官方建议不超过 2~3 个,每个列族 MemStore 独立,列族多了会有很多小 MemStore 反复 Flush。
- 生产环境开 Snappy 压缩:比 GZ 快、压缩率够用,CPU 开销小。
- scan 必须带 Filter 或起止行:全表 scan 在百亿级表上是灾难。
总结
HBase 的学习曲线是”入门容易精通难”:Shell 操作半天就能上手,但真正把 RowKey、预分区、Compaction、Region 分裂调到生产可用,需要反复看源码和踩坑。这套尚硅谷课程的价值在于把架构原理(读写流程、Flush/Compact)和项目实战(谷粒微博)串起来了,建议跟着视频把谷粒微博从头做一遍——关注、粉丝、时间线这几个表的 RowKey 设计,是检验你是否真懂 HBase 的最好试金石。
📁 目录结构
📋 点击展开查看课程模块大纲
[V2]【尚硅谷】大数据技术之HBase - 带源码课件/
├── 入门篇(01~06):课程介绍 / HBase 特点与架构 / 角色介绍 / 安装配置启动
├── Shell 篇(07~09):增查改删操作
├── 原理篇(10~14):数据结构 / 读写流程 / Flush & Compact 参数
├── Java API 篇(15~22):新旧 API / 建表删表 / 增删改查 / 全表扫描 / 指定列族查询
├── MR 集成篇(23~28):官方案例 / 自定义 Mapper & Reducer & Driver / 打包测试
├── Hive 集成篇(29~32):Hive 与 HBase 对比 / 集成需求一、二
├── 调优篇(33~36):高可用 / 预分区 / RowKey 设计 / 内存与基础优化
├── 项目实战:谷粒微博(37~50):需求分析 / 命名空间 / 建表 / 发微博 / 关注取关 / 版本修复 / 过滤器 / 页面初始化 / 测试
└── 课件.zip
资源获取
💡 建议:尽快保存到本地网盘或电脑,避免分享链接后期失效。
整理不易,如果对你有帮助,欢迎分享给更多需要的朋友。













请登录后查看评论内容