这是我参与「第四届青训营 」笔记创作活动的的第10天。
写在前面
即便有学习HBase理论的经验,真正掌握一个技术还是需要去进行实战,这次的笔记完成对原理的回顾和简单的实战使用,作为基于HDFS实现存储计算分离架构的分布式表格存储服务,值得学习和深入应用的探索。
笔记正文
1. 适用场景
2. 架构设计
3. 大数据支撑
1. HBase在大数据生态的定位
- 对TB、PB级数据支持强一致、近实时的读写性能,支持快速的ad-hoc分析查询任务
- 字典序批量扫描大量数据,支持只读取部分列族数据
- 灵活支持不同查询模式,避免读取不必要数据
- 存储大规模任务的中间/最终计算结果
- 水平扩展平滑、并发访问
- 按需扩展,避免浪费
2. 水平扩展
- RegionServer实例,分配部分region到新实例
- 扩展过程平滑,无需搬迁实际数据
- 可用性影响时间很短
3. Region热点切分
Overview
- Region数据量过多需要切分成两个独立的子Region
- RegionServer检查是否应该切分,RPC上报HMaster,Assignment Manager执行transition
- 不实际搬迁数据,切分产生的新region数据目录
切分点选取
目标: 优先把最大的数据文件均匀切分
Steps:
- 找到该表哪个region的数据大小最大
- 哪个column family的数据大小最大
- 找到哪个column family内哪个HFile的数据大小最大
- 找到HFile里处于最中间位置的Data Block
- 用这个Data Block第一条的KV的rowkey作为切分点
4. Region碎片整合
- 合并相邻的region整合优化数据分布
- 只允许合并相邻region,否则打破rowkey空间连续且不重合的约定
5. Region负载均衡
- SimpleLoadBalancer
- StochasticLoadBalancer
- FavoredNodeLoadBalancer
6. HMaster
- HMaster通过多实例基于ZooKeeper选主实现高可用
7. Distribted Log Split
- Distributed Log Split
- Distributed Log Replay
4. 最佳实践
1. RowKey设计策略
- 不需要顺序扫描批量连续rowkey
- 需顺序扫描批量连续rowkey
- rowkey长度保持较短,因为冗余存储到k-v当中去