0
点赞
收藏
分享

微信扫一扫

深入浅出 HBase 实战|青训营笔记

一、HBase适用场景

HBase特性

深入浅出 HBase 实战|青训营笔记_数据

HBase数据模型

HBase以列族为单位存储数据,以行键索引数据

  • 列族需要在使用前预先创建,列名不需要预先声明,因此支持半结构化数据模型
  • 支持保留多个版本的数据,(行键+列族+列名+版本号)定位一个具体的值

深入浅出 HBase 实战|青训营笔记_数据_02

简单起见可以将HBase数据格式理解为如下数据结构:

// table名格式:"${namespace}:${table}"
// 例如:table = "default:test_table"
[
"rowKey1": { // rowkey定位一行数据
"cf1": { // column family需要预先定义到表结构
"cq_a": { // column qualifier无需定义,使用任意值
"timestamp3": "value3",
// row=rowKey1, column="cf1:cf_a", timestamp=timestamp2
// 定位一个cell
"timestamp2": "value2",
"timestamp1": "value1"
},
"cq_b": {
"timestamp2": "value2",
"timestamp1": "value1"
}
},
"cf3": {
"cq_m": {
"timestamp1": "value1"
},
"cq_n": {
"timestamp1": "value1"
}
},
},
"rowKey3": {
"cf2": { // 缺省column

使用场景

  • “近在线”的海量分布式KV/宽表存储,数据量级达到百TB级以上
  • 写密集型应用,高吞吐,可接受一定的时延抖动
  • 需要按行顺序扫描的能力
  • 接入Hadoop大数据生态
  • 结构化、半结构化数据,可以经常新增/更新列属性
  • 平滑的水平扩展

深入浅出 HBase 实战|青训营笔记_笔记_03

优缺点

深入浅出 HBase 实战|青训营笔记_笔记_04

二、HBase架构设计

主要组件

深入浅出 HBase 实战|青训营笔记_数据_05

  • HMaster:元数据管理、集群调度、保活
  • RegionServer:提供数据读写服务,每个实例负责若干个互不重叠的rowkey区间内的数据
  • ThriftServer:提供Thrift API读写代理层
  • Zookeeper:分布式一致性共识协作管理,例如HMaster选主、任务分发、元数据变更管理
  • HDFS:分布式文件系统,HBase数据存储底座

三、大数据支撑

HBase在大数据生态的定位

  • 对TB、PB级海量数据支持强一致、近实时的读写性能,支持快速的ad-hoc分析查询任务
  • 支持字典序批量扫描大量数据,支持只读取部分列族的数据,灵活支持不同的查询模式,避免读取不必要的数据
  • 存储大规模任务(MapReduce、Spark、Flink)的中间/最终计算结果
  • 平滑快速的水平扩展能力,能够敏捷应对大数据高速增长的数据体量和大规模的并发访问
  • 精细化的资源成本控制,计算层和存储层分别按需扩展,避免资源浪费

水平扩展

深入浅出 HBase 实战|青训营笔记_数据_06

  • 增加RegionServer实例,分配部分region到新实例
  • 扩展过程平滑,无序搬迁实际数据
  • 可用性影响时间很短,用户基本无感知

Region热点切分

  • 找到该表中哪个region的数据最大
  • 找到该region内哪个column family的数据最大
  • 找到column family内哪个HFile的数据大小最大

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

深入浅出 HBase 实战|青训营笔记_结构化_07

  • 找到HFile里处于最中间位置的Data Block
  • 用这个Data Block的第一条KeyValue的Rowkey作为切分点

深入浅出 HBase 实战|青训营笔记_大数据_08

Region碎片整合

深入浅出 HBase 实战|青训营笔记_大数据_09

Region负载均衡

深入浅出 HBase 实战|青训营笔记_大数据_10

  • 根据总的region数量和RegionServer的数量计算平均的region数量,设定弹性上下界避免不必要的操作,例如默认slop为0.2,平均region数量为5,则负载均衡的RS上的region的数量为[4, 6]
  • 将RegionServer按照region数量降序排序,对region数量超出上界的选取需要迁出region并且按照创建时间从新到老排序
  • 选出region数量低于下限的RS列表,round-robin分配步骤2选出的regions
  • 处理边界情况,尽量保证region数量接近

\

举报

相关推荐

0 条评论