HBase写流程基本概念

在HBase写入的过程中,要从client和server端两部分来看。
在client端,会将写入的数据添加到本地缓冲区中,符合一定条件就会通过AsyncProcess异步批量提交。然后会去查找meta表,根据rowkey查找到对应的region信息,直接连接到对应的regionServer,进行写操作。
在regionServer端,为了保证写入数据在异常情况下不丢数据以及保证写入速度。分别引入了HLog和MemStore。HLog的主要作用是在机器或者HBase数据异常情况下进行数据恢复的。MemStore是为数据提供了一块内存存储,当这块存储达到一定的阈值,就把数据flush到HFile中进行持久化存储。以下会分别介绍HLog和MemStore是如何工作的。

HLog

在写操作的时候,client的数据会先同步到HLog,之后才会写入Memstore中,当此时HBase发生异常,MemStore中的数据会丢失,这时候会从HLog中加载数据进行恢复操作。
每个RegionServer拥有一个或多个HLog。存储在/hbase/WALs文件夹下。在2.0之后,可以通过WALPrettyPrinter进行HLog内容的打印。

 $ ./bin/hbase wal
hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012

在之前的版本可以使用

$ ./bin/hbase hlog hdfs://example.org:8020/hbase/.logs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012

生命周期

一旦对数据进行修改,插入,删除等操作的时候,这些操作都会先写入HLog中。对于HLog中数据的管理有四个阶段。

  • 把来自client的数据直接同步写入到HLog文件中。
  • 按照配置hbase.regionserver. logroll.period定时去新建一个新的HLog文件接受新的请求。
  • 一旦数据在HFile中落盘就把HLog中的数据标记为过期。如果日志中所有日志记录已经落盘,则可以认为该日志文件失效。同时移到oldWALs文件夹。
  • 根据配置hbase.master.cleaner. interval'定时删除过期日志文件。

MemStore

对于MemStore,在写操作之间做缓存主要有以下好处:

  • 可以减少flush的次数。
  • 当此时有读操作可以直接从内存操作。
  • HFile中KeyValue数据需要按照Key排序,在MemStore中可以执行这个排序过程。

内部结构

HBase采用了跳跃表的数据结构,在Java实现中,直接使用了JDK的ConcurrentSkipListMap。可以保证线程安全的读写操作。

基本操作

  • 检查当前可用的Chunk是否写满,如果写满,重新申请一个2M的Chunk。(关于Chunk和ChunkPool参见HBASE-8163
  • 将当前KeyValue在内存中重新构建,在可用Chunk的指定offset处申请内存创建一个新的KeyValue对象。
  • 将新创建的KeyValue对象写入ConcurrentSkipListMap中。

HFile

HFile的逻辑结构图如下:


HFile V2逻辑结构图

HFile依次由Scanned Block、Non-scanned Block、Load-on-open以及Trailer四个部分组成。
MemStore中KV在flush成HFile时首先构建Scanned Block部分,即KV写进来之后先构建Data Block并依次写入文件,在形成Data Block的过程中也会依次构建形成Leaf index Block、Bloom Block并依次写入文件。一旦MemStore中所有KV都写入完成,Scanned Block部分就构建完成。Non-scanned Block、Load-on-open以及Trailer这三部分是在所有KV数据完成写入后再追加写入的。

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

推荐阅读更多精彩内容

  • 1. HBase简介 1.1 什么是HBase HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,...
    Yobhel阅读 551评论 0 0
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 5,572评论 0 52
  • 这边笔记主要作用就是让自己更好的深入理解HBase的运行原理,当遇到问题时能高效快捷的锁定并解决问题。 原理剖析我...
    机灵鬼鬼阅读 4,358评论 0 2
  • 摘要前面一篇文章介绍了Kafka的具体内容,今天讲述一下HBase相关的知识。首先HBase作为大数据发展初期伴随...
    ThoughtWorks阅读 248评论 0 1
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/ningxuezh...
    丝丝雨凉阅读 2,229评论 0 1