HBase 学习笔记其一:概念

 

概述

HBase 是海量数据下可以对单条数据快速访问的数据库

特点

  1. 适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返 回数据。处理能力和存储能力都很容易扩展
  2. HBase本质依然是Key-Value数据库,查询数据功能很简单,不支持join等复杂操作(可通过Hive支持来 实现多表join等复杂操作)
  3. 根据列族来存储数据的。列族下面可以有非常多的列,列族在 创建表的时候就必须指定。
  4. HBase中支持的数据类型:byte[](底层所有数据的存储都是字节数组)
  5. 稀疏:在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用 存储空间的

逻辑视图

 

 

如何定位到一条数据

table -> rowkey -> column family -> column -> timestamp

rowkey 行键

查询一行数据的主键,RowKey行键可以是任意字符串,最好是16

访问一行数据只有三种方式:

  1. 通过单个 row key 访问
  2. 通过 row key 的range
  3. 全表扫描

存储时,数据按照RowKey的字典序(byte order)排序存储。设计Key时,要充分排序存储这个特性,将 经常一起读取的行存储放到一起。(位置相关性)

column family 列族

HBase表中的每个列,都归属于某个列簇。列簇是表的Schema的一部分(而列不是),必须在创建表的时候指定。

列簇越多,在取一行数据时所要参与IO、搜寻的文件就越多,所以,如果没有必要,不要设置太多的列 簇,官网推荐是小于等于3

column 列键

也称为列名,必须以列族作为前缀,格式为列族:限定词

timestamp 时间戳

HBase 会保存同一份数据的多个版本,版本通过时间戳来管理。

查询时,默认返回最新的数据,如果需要读取 旧版本的数据,可以指定时间戳。

数据也不能无限制的保存历史数据,可以通过下面两种方式删除历史版本的数据:

  • 保存数据的最后 n 个版本
  • 保存最近一段时间的版本(设置数据的生命周期 TTL)

cell 存储单元格

要定位一个单元,需要满足“行键+列键+时间戳”三个要素。

每个Cell保存着同一份数据的多个版本。

Cell中没有数据类型,完全是字节存储。

使用场景

  • 搜索
  • 反向索引

概念

Hbase 的架构和原理

HMaster

每台 Region Server 都会与 Master 进行通信,HMaster 的主要任务就是告诉 Region Server 它需要维护哪些 Region,具体功能如下:

  • 管理用户对表的增删改查操作

  • 管理 Region Server 的负载均衡,动态调整 Region 分布

  • 在 Region 分裂后,负责新的 Region 的分配

  • 在 Region Server 停机后,负责失效 Region Server 上的 Region 的迁移

宕机后,短时间不会影响读操作

Region

由多个Store组成,HBase使用表存储数据集,当表的大小超过设定的值时, HBase会自动将表划分为不同的Region,它是HBase集群上分布式存储和负载均衡的 最小单位。

 Store 分为memstore 和 HFile(StoreFile),memstore写满后(默认 128M),会刷写到磁盘。

RegionServer

由多个Region 组成,在整个集群中可能存在多个节点,每个节点只 能运行一个Region Server,负责对HDFS中读写数据和管理Region和HLog。

WAL 机制

WAL(Write Ahead Log) 预写日志,保证数据操作的原子性和持久性

HBase 通过 HLog 实现 WAL ,每次更新操作都会先写日志到 HLog,服务器宕机后通过 HLog 对数据进行恢复

Zookeeper

  • META 表的位置信息

  • Region Server 故障时,通知 HMaster 进行 Region 迁移

  • HMaster HA

Hbase 的读流程

  1. Client 从 zk 获取 META 表的位置信息

  2. Client 从某个 Region Server 获取 META 表

  3. Client 缓存 META 表在本地,通过 META 表找到 row key 所在的 Region Server

Hbase 的写流程

 

  1. Client put 会将数据先写入 WAL

  2. WAL 写入成功后会,再写入到 memstore,成功后返回 ACK

  3. Memstore 满后会写入到 HFile

HBase 的 Compaction

在 put 的过程中,会产生大量的 HFile,大量小文件会导致性能问题。通过 Compaction 将多个小 HFile 合并成大 HFile,对过期的数据(超过TTL,被删除,超过最大版本号)进行真正的删除

  • Minor Compaction: 临近的 HFile 合并,会清理 TTL 的数据,但是不会清理被删除的数据

  • Major Compaction: 会将一个 store 下的所有 HFile 进行合并,并且会清理掉过 期的和被删除的数据

 单个StoreFile大小超过一定阈值后,触发 Split操作,把当前Region Split成2个Region

Major Compaction 的问题

一般情况下,Major Compaction时间会持续比较长,整个过程会消耗 大量系统资源,对上层业务有比较大的影响。因此,生产环境下通常关闭自动触发 Major Compaction功能,改为手动在业务低峰期触发

Compaction是一个IO密集型操作,必然对读写造成性能影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值