RegionServer详解

HRegionServer是HBase中最主要的组件,负责table数据的实际读写,管理Region。在分布式集群中,HRegionServer一般跟DataNode在同一个节点上,目的是实现数据的本地性,提高读写效率。

0.94之后的HRegionServer:图片来自Map-R网站
0.94之前的HRegionServer
HBase结构

1 RegionServer中的组件

1.1 WAL:Write Ahead Log

1.1.1 主要特点

  • 为一个文件
  • 0.94之前叫做HLog,存储在/hbase/.logs/目录中
  • 0.94之后存储在HDFS上的/hbase/WALs/{HRegionServer_name}
  • 记录RegionServer上的所有编辑信息(Puts/Deletes操作,属于哪个Region),在写到memstore之前
  • 理论上一个RegionServer上只有一个WAL实例,数据操作为串行,造成性能瓶颈
  • 用于RegionServer失效时,通过Replay恢复RegionServer上memstore中尚未持久化的数据

1.1.2 多WAL实例

  • HBase1.0 之后,通过使用底层HDFS的多管道实现了多WAL并行写入,提高了吞吐量
  • 并行化是通过对多个Region进行分区实现的,如果只有一个Region,那么该方案无效
  • 通过在hbase-site.xml中配置,然后重启RegionServer
<property>   
  <name>hbase.wal.provider</name>   
  <value>multiwal</value> 
</property>

1.1.3 WAL Splitting :分组

  • 将WAL按照Region进行分组的过程称为WAL Splitting。这对于Region Server挂掉数据恢复来说是一个非常关键的过程。
  • 该操作是在集群启动时HMaster执行或者RS失效时执行的
  • 涉及到Region在此操作完成之前是不可用的
  • 流程请看文章后面

1.1.4 WAL Replay :重播

可查看 3.4 WAL Repaly 流程

1.2 MemStore

  • 写缓存,数据先写到MemStore,flush触发后刷新到磁盘
  • 以KeyValue的形式存储在内存当中
  • 当MemStore flush触发时,属于同一Region的所有MemStore会刷新到磁盘中
  • 是Region中的重要组成部分,详细请查看Region详解

1.3 BlockCache

  • 读缓存,数据被读取之后仍然缓存在内存中
  • 有LruBlockCache(效率较高,GC压力大)和BucketCache(效率较低,没有GC压力)两种BlockCache,默认为LruBlockCache
  • 每个RegionServer中只有一个BlockCache实例

1.3.1 HBase 'Block'

  • HBase读写中的最小单元
  • 有四种类型的block:DATA、INDEX、BLOOM和META
    • DATA:存储用户数据
    • INDEX:用于提高读取速度,为DATA BLOCK中的cell建立索引
    • BLOOM:用于提高读取速度,用bloom filter过滤掉不包含需求数据的block
    • META:存储HFile本身数据和元数据

详细信息请看 BlockCache资料

1.4 Region

  • HBase表格根据row key 划分成“Regions”。
  • 一个Region包含该表格中从起始key到结束key之间的所有行。
  • Region由Store组成。
  • Regions会被分配到集群中称为“Region Servers”的节点

详细信息请看Region详解

2 RegionServer的主要功能

  • 定期向Master汇报RS的情况,包括RS内存使用状态、在线状态的Region等信息
  • 管理Region,执行Flush、Compaction、Open、Close、Load等操作
  • 管理WAL
  • 执行数据插入、更新和删除操作
  • Metrics:对外提供了衡量HBase内部服务状况的参数
  • 内置HttpServer,提供访问RS的界面

3 RegionServer的主要流程

3.1 首次读写流程

  • Client从ZooKeeper中读取hbase:meta表
  • Clinet从hbase:meta获取想要操作的Region的位置信息,缓存hbase:meta在Client中,用于后续的操作
  • Client向目标Region所在的RegionServer发送请求,执行操作
  • 当一个region因为Master执行负载均衡或者RegionServer挂掉而执行的重定位之后,Client需要重新读取hbase:meta进行缓存
首次读写流程,图片来自Map-R网站

3.2 写流程

  • Client提交一个Put请求到RegionServer,数据首先会写到WAL中
  • 当数据写到WAL之后,数据会写到MemStore中,等待刷新到磁盘中
  • 数据写到MemStore完成之后,RS会给Client发送确认信息
写流程(一),图片来自Map-R
写流程(二),图片来自Map-R

3.3 读流程

  1. 首先扫描BlockCache(读缓存)中寻找row cell,若没有则执行2
  2. 扫描MemStore(写缓存)中寻找row cell,若没有则执行3
  3. HBase会使用BlockCache索引和bloom filters来加载那包含目标row cells的HFile到内存
读流程,图片来自Map-R

3.4 WAL Splitting 流程

  1. /hbase/WALs/<host>,<port>,<startcode> 目录进行重命名
  • 改成:/hbase/WALs/<host>,<port>,<startcode>-splitting
  • 当RS被HMaster被认为失效的时候,它可能仍然在运行,所以为了保证已经存在的有效的数据
  1. 读取WAL中的Edits信息根据region将属于不同region的edits写到对应的/hbase/<table_name>/<region_id>/recovered.edits/.temp(临时文件),当splitting完成后,临时文件名称会修改为写入该文件的第一个log信息的序列号
  2. 在Splitting完成后,涉及到的Region会被分配新的RegionServer,那么在新的RegionServer打开Region时会检查recovered.edits目录下是否有edits文件,如果有则读取edits写入到MemStore中,写入完成后刷新到HFile中并删除edits文件。

3.4 WAL Repaly 流程

  • WAL Replay流程依赖于WAL Splitting流程
  • WAL Replay流程实际上就是WAL Splitting流程中第三步
  • WAL Replay是在打开Region时完成的
WAL Replay,图片来自Map-R

参考资料

BlockCache
Apache HBase ™ Reference Guide
An In-Depth Look at the HBase Architecture
深入分析RegionServer

若有侵权,请联系我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容