美文网首页我爱编程
Hbase问题汇总2

Hbase问题汇总2

作者: 小小少年Boy | 来源:发表于2018-08-08 13:11 被阅读0次

1 HBase的物理结构???

HBase中所有数据文件存储在HDFS,主要有两种文件类型:

  • HFile:Hadoop的二进制格式文件,存储KeyValue数据
  • Hlog:HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File

StoreFile是对HFile的轻量级包装,即StoreFile底层就是HFile

2 HBase表物理存储

HBase表物理存储

Table中所有行都按照rowkey的字典序排序,Table 在行方向上分为多个Region

  • 行按照行键的字典序排列;
  • 表在行的方向上分割为多个Region(256M),Region按大小可以分割;
  • 每个表一开始只有一个Region,随着数据不断插入,Region不断增大,增大- - 到一定阈值,Region会等分为两个新的Region;当表中的行不断增多,就会有越来越多的Region。

Region由一个或者多个Store组成,每个Store保存一个column family
每个Store又由一个MemStore和0至多个StoreFile组成

  • MemStore存储在内存中
  • StoreFile以HFile格式保存在HDFS上

MemStore:用户写入的数据首先放入MemStore,MemStore满了会Flush成一个StoreFile(底层实现是HFile)

StoreFile:StoreFile文件数量增长到一定阈值,会触发Compact操作,将多个StoreFile合并成一个StoreFile

Compact:合并过程会进行版本合并和数据删除,HBase只增加数据,所有更新和删除都是在后续的compact过程中进行的

异步写入:用户写操作只要进入内存就可以立即返回,保证了HBase I/O的高性能

3 Hifle文件格式???

二进制格式文件,存储KeyValue数据,建立索引,提高读的效率
Trailer(指针,指向其他数据块)、Data Block Index、Data Block(魔数:信息校验+Key/Value 可以被压缩)

4 Hlog文件???

预写日志,将RegionServer插入和删除过程记录操作内容的日志,物理上是序列化文件,可用于灾难恢复;顺序写,减少磁盘寻址,定期删除。

每个RegionServer上所有Region维护一个HLog,不是每个Region一个
不同Region日志混在一起,只追加单个文件,数据按到达顺序写入,减少磁盘寻址次数,提供最好的IO
HLog文件会定期删除(已持久化到StoreFile中的数据)

5 HLog的日志恢复(Hlog Replay)

  • RegionServer挂掉,MemStore中数据会丢失。Master通过Zookeeper感知到RegionServer故障
  • Master将不同Region的Log数据进行拆分,并将失效的Region重新分配;
  • 领取到待恢复Region的RegionServer在Load Region时,会Replay HLog中的数据到MemStore;

6 合并和分裂(Compact And Split)

StoreFile Compact后,会形成越来越大的StoreFile;(合并:大合并和小合并)
单个StoreFile大小超过一定阈值后,会触发Split,把当前Region Split成2个Region;
父Region会下线,新Split出的2个Region会被Master分配到相应的RegionServer上;
原先1个Region的压力会分流到2个Region上。

7 容错机制

image.png

RegionServer上线
会在Zookeeper中注册自己
定时向Zookeeper汇报心跳
Master会订阅Server变更消息,感知各个Server健康状态
Master会向该Server迁移Region

RegionServer下线
Zookeeper自动释放此RegionServer的独占锁
Master收到RegionServer下线的通知
Master将该RegionServer上的Region重新分配到其他RegionServer上
Master将失效RegionServer上“预写”日志分割并发送给新的RegionServer
(Region的迁移是需要下线的,会暂时不可用,但是速度快,不会对数据的读写造成影响)

Master上线
从Zookeeper上获取一个代表主Master的锁,用来阻止其它Master成为主Master
扫描Zookeeper上的Server目录,获得当前可用的Server列表
和每个Server通信,获得当前已分配的Region和Server的对应关系
扫描.META.Region的集合,计算得到当前还未分配的Region,将他们放入待分配Region列表

Master下线
Master只维护表和Region的元数据,表数据读写还可以正常进行
Master下线仅导致所有元数据修改被冻结
无法创建删除表
无法进行Region的负载均衡
无法处理Region上下线
Zookeeper重新选择一个主Master

8 Region的定位?

HBase中有两张特殊的Table:
Zookeeper:记录了-ROOT-表的location

-ROOT-
记录了.META.表的Region信息,-ROOT-只有一个Region

.META.
记录了用户表的Region信息,.META.可以有多个Region;保存Region和RegionServer的映射关系

系统如何找到某个RowKey(或者RowKey Range)所在的Region

  • -ROOT-表保存所有.META.表所在Region的位置, 此表不会拆分,只有一个Region,保证了只需要三次跳转,就能定位到任意Region
  • .META.表每行保存一个用户表Region的位置信息
  • 为了加快访问,.META.表的全部Region都保存在内存中
  • Client将查询过的位置信息缓存起来

9 HBase读写过程

读请求时,需要访问Store中全部的StoreFile和MemStore,将他们按照Rowkey进行合并
StoreFile和MemStore都是经过排序的,并且StoreFile带有内存索引,合并过程比较快

StoreFile是只读文件,创建后不可修改
HBase的更新和删除其实是不断追加
当StoreFile文件数达到一定的阈值后,就会进行一次合并(compact),形成一个大的StoreFile,并执行修改和删除操作
当StoreFile大小达到一定阈值后,会对StoreFile进行Split,等分为两个StoreFile

客户端发起Put请求,写入WriteBuffer,如果是批量提交,写满缓存后自动提交
客户端根据Rowkey将put分发给不同RegionServer
RegionServer将put按Rowkey分给不同的Region
Region首先把数据写入WAL
WAL写入成功后,把数据写入MemStore
MemStore写完后,检查MemStore大小是否达到flush阈值
如果达到flush阈值,将MemStore写入HDFS,生成HFile文件

更新

使用MemStore和StoreFile存储对表的更新
更新时首先写入HLog和MemStore(数据是排序的)
当MemStore到一定阈值,创建一个新的MemStore,将老的MemStore flush到磁盘,生成一个StoreFile
系统会在Zookeeper中记录一个Redo Point,表示这个时刻之前的变更已经持久化了
系统出现故障,导致MemStore中的数据丢失,此时使用HLog来恢复数据

相关文章

  • Hbase问题汇总2

    1 HBase的物理结构??? HBase中所有数据文件存储在HDFS,主要有两种文件类型: HFile:Hado...

  • Hbase问题汇总与解答

    今天早上分享了下HBase,分享的时候同事提出了一些问题,可能大部分有有这样的困惑,汇总下来: HBase问题汇总...

  • Hbase问题汇总3

    1 HBase 查找一条数据的过程 ?或者HBase工作机制? 参考:HBase 查找一条数据的过程 白话理解1....

  • HBase问题答疑汇总

    1. HBase有合适的SQL层吗? 单机kv基础上做分布式kv再做SQL计算,为什么不在已有的HBase基础上再...

  • ROC-AUC 曲线以及PRC曲线

    目录:机器学习常见面试问题汇总问题汇总(1):逻辑回归问题汇总(2):支持向量机问题汇总(3):树模型问题汇总(4...

  • 问题汇总(5):神经网络

    这篇应当也是很重要的把~ 目录:机器学习常见面试问题汇总问题汇总(1):逻辑回归问题汇总(2):支持向量机问题汇总...

  • Hadoop+HBase+Hive问题汇总

    yarn中提交的任务只能一个接着一个执行不能并发执行。最终通过看RM的日志发现问题,遇到问题解决不了的时候一定要看...

  • HBase从入门到放弃

    HBase解决了什么问题: 1)HBase主要解决在Hdfs上可以随机读写的问题 2)Hive只能查询,不能随机读...

  • HBase BulkLoad Can not create a

    问题现象 高于1.0的HBase进行BulkLoad抛出异常: 问题分析 当前HFileOutputFormat2...

  • 一条数据的HBase之旅,简明HBase入门教程-开篇

    常见的HBase新手问题:1. 什么样的数据适合用HBase来存储?2. 既然HBase也是一个数据库,能否用它将...

网友评论

    本文标题:Hbase问题汇总2

    本文链接:https://www.haomeiwen.com/subject/bqmtbftx.html