HBase的原理与实战——实战篇 | 青训营笔记

77 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第10天。

写在前面

即便有学习HBase理论的经验,真正掌握一个技术还是需要去进行实战,这次的笔记完成对原理的回顾和简单的实战使用,作为基于HDFS实现存储计算分离架构的分布式表格存储服务,值得学习和深入应用的探索。

笔记正文

1. 适用场景

见原理篇 juejin.cn/post/713422…

2. 架构设计

见原理篇 juejin.cn/post/713422…

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当中去

2. Column Family设计策略

3. 字节跳动自研分布式表格存储系统