HBase 数据读写流程

2016-10-18 杜亦舒

读数据

HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中

假设现在想在用户表中获取 row key 为 row0001 的用户信息

要想取得这条数据,就需要先找到含有此条记录的 region

HBase 是如何定位到具体 regionserver 中的具体 region 的呢?

HBase 中有一个内置的 hbase:meta 表,其中记录了所有表的所有 region 的详细信息

例如 region 的 开始KEY结束KEY所在server的地址……

hbase:meta 表就像一个目录,通过他可以快速定位数据的实际位置

hbase:meta 表是存储在 ZooKeeper 中的,所以客户端就需要先访问 ZooKeeper,获取到 hbase:meta,从中查询出目标数据是在哪个 regionserver 中的哪个 region 中,然后到 region 中进行读取

我们可能会感觉这个寻址路径有点长,所以客户端会将查询过的位置信息保存缓存起来,方便以后快速读取

写数据

写操作会被分配到对应的 regionserver 进行处理,先回顾一下 regionserver 的结构

从客户端来看,写操作比较简单,写请求到达 regionserver 后,这些修改会先被写到 MemStore和 HLog 中,成功写入后便会通知客户端写入完成了

MemStore 是内存缓存,保存最近更新的数据
HLog 是日志文件,记录着所有的更新操作

对于系统来说,写操作还没完,系统会定期调用刷新缓存的方法,把MemStore中的内容写入文件,生成一个新的 StoreFile,然后把缓存清空,并在HLog中做一个标记,表明上面的内容已经写入文件

这样,数据就真正落地了,但写操作会引发一些后续问题,例如HLog日志文件越来越大了、StoreFile越来越多了、当前region越来越大了,所以,系统有还有更多的工作需要做

  • 系统会定期清理HLog日志文件,把其中已经写入文件的记录删除

  • 当 StoreFile 文件数量超过设定值时,会触发合并操作,合并成一个大文件,如果这个大文件超过了设定值,会再被分割开

  • region的大小达到阈值时,会被切分开,生成一个新的regionHMaster会对其进行管理,分配到合适的 regionserver

  • region的变化后,系统还需要对 hbase:meta 表进行维护

HBase 数据读写流程的更多相关文章

  1. HBase数据读写流程(1.3.1)

    ===数据写入流程=== 源码:https://github.com/apache/hbase/blob/master/hbase-server/src/main/java/org/apache/ha ...

  2. Hbase数据读写流程

    From: https://blog.csdn.net/wuxintdrh/article/details/69056188 写操作: Client写入,存入Memstore,Memstore满则Fl ...

  3. HBase - 数据写入流程解析

    本文由  网易云发布. 作者:范欣欣 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻松 ...

  4. Hbase的读写流程

    HBase读写流程 1.HBase读数据流程 HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在 ...

  5. HBase数据存取流程

    一.HBase的特点是什么 1.HBase一个分布式的基于列式存储或者行式存储的数据库,基于hadoop的hdfs存储,zookeeper进行管理. 2.HBase适合存储半结构化或非结构化数据,对于 ...

  6. JuiceFS 数据读写流程详解

    对于文件系统而言,其读写的效率对整体的系统性能有决定性的影响,本文我们将通过介绍 JuiceFS 的读写请求处理流程,让大家对 JuiceFS 的特性有更进一步的了解. 写入流程 JuiceFS 对大 ...

  7. 2.1-2.2 HBase数据存储

    一.HBase数据检索流程 一篇介绍HBase数据读写流程的解析的博文:http://hbasefly.com/2016/12/21/hbase-getorscan/?wsfatm=uqvhl3 1. ...

  8. HBase 文件读写过程描述

    HBase 数据读写过程描述 我们熟悉的在 Hadoop 使用的文件格式有许多种,例如: Avro:用于 HDFS 数据序序列化与 Parquet:常见于 Hive 数据文件保存在 HDFS中 HFi ...

  9. 【HBase】知识小结+HMaster选举、故障恢复、读写流程

    1:什么是HBase HBase是一个高可靠性,高性能,面向列,可伸缩的分布式数据库,提供海量数据存储功能,一个结构化的分布式存储系统,不同于一般的关系型数据库,它适合半结构化和非结构化数据存储. 2 ...

随机推荐

  1. Java被忽略的基本知识(二)

    14.字符串的内容不可改变,不能修改某个下标的字符值.字符串之间的"+"连接是通过"断开--再连接",修改变量的栈中的引用地址指向. 15.对于数组.类(类的属 ...

  2. 用mac系统制作mac系统启动盘

    1.找一个大于8G的U盘,最好3.0接口 2.将U盘插入电脑,打开电脑的磁盘工具,将其抹去为“Mac OS扩展”格式,名称随意 3.下载一个mac系统dmg镜像 4.在系统中打开镜像 5.打开终端,输 ...

  3. 夺命雷公狗-----React---16--事件操作事件

    <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...

  4. 浅谈UI设计中妙用无穷的深色系背景

    英文:medium 译者:优设网 - 陈子木 链接:http://www.uisdc.com/ui-benefits-of-dark-background# --------------------- ...

  5. [原创]使用Gradle的插件EnIDE build的时候,输出的中文总是乱码。

    使用Gradle的插件EnIDE build的时候,输出的中文总是乱码.解决办法:在EnIDE的设置里面,设置JVM options GRADLE_OPTS 为:-Dfile.encoding=UTF ...

  6. vue.js 渲染完成回调

    vue.js渲染完成后,想触发一些事情,写在哪里呢? 答案是mounted 例子: new Vue({ el:'#demo', data:{ text:'Hello' }, mounted:funct ...

  7. C#控制台项目更改运行文件

    这个是极光推送的C# demo,里面有几个文件,要先后运行.这是第一次遇见,所以一下子找不到北,摸索了好一会儿才知会.于是做了这面一个记录. 右击鼠标,查看属性弹出这个这面,然后选择要启动的对象.保存 ...

  8. 如何清除WebBrowser的Cookies

    var document = webBrowser1.Document; document.ExecCommand("ClearAuthenticationCache", fals ...

  9. Breeze库API总结(Spark线性代数库)(转载)

    导入 import breeze.linalg._ import breeze.numerics._ Spark Mllib底层的向量.矩阵运算使用了Breeze库,Breeze库提供了Vector/ ...

  10. hadoop 安装教程 转载

    hadoop2.2安装教程:http://www.aboutyun.com/thread-7684-1-1.html hadoop2.X使用手册1:通过web端口查看主节点.slave1节点及集群运行 ...