HBase的读写数据流程

摘要:
此时,磁盘和内存被一起读取,磁盘中的数据被读取后将被放入块缓存。因此,读取过程无论如何都会扫描磁盘,这导致HBase的读取过程比写入过程慢。从读/写过程的两个流程图可以看出,HMaster似乎没有参与整个读/写流程。事实上,主机根本无法参与读/写过程,因为读和写数据所需的元表位置信息存储在zookeeper中,这是主机和客户端之间交互的一部分。因此,即使主机发生故障,用户也可以在客户端上读写。

写流程:

HBase的读写数据流程第1张

具体流程:

  Client进行写操作的时候,会先查询Meta缓存中是否含有目标table的region信息以及Meta表位置信息,如果有就不再去访问zookeeper,而是直接进行下一步的操作。如果没有则会去访问zookeeper,获取hbase:meta表位于哪个Region Server。Meta表主要用于存储用户表和系统表的所在位置。在低版本的时,会有一个-ROOT-表,用于存储meta表的位置信息,这个操作主要是为了预防meta表过大而需要对meta表进行切分,切分之后就会造成有多个meta表,这就需要一个表准们存储meta表的位置信息;

  获取到meta的位置信息以后,会去访问对应的Region Server,根据读请求的信息namespace:table/rowkey,查询处目标数据位于哪个Region Server中的哪个Region。并将该table的region信息以及meta表的位置信息缓存到客户端的meta cache,方便下次访问;

  然后与得到的RegionServer通讯,将数据顺序写入(append)到WAL,此时并不进行同步操作,即并不将wal写到hdfs

  将数据写入对应Region的memstore中,数据会在MemStore中进行排序;

  同步wal,将wal写到hdfs,如果不能同步成功则会进行回滚操作。wal和数据写入到memstore是一个整体的事务,要么都成功要么都失败;

  上面成功后,向客户端发送ack;

  等达到MemStore的刷写时机后,将数据刷写到HFile中。

读流程

  HBase的读写数据流程第2张

具体步骤:

 1)Client 先访问zookeeper,获取hbase:meta 表位于哪个Region Server。

 2)访问对应的Region Server,获取hbase:meta 表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。

   3)与目标Region Server进行通讯;

   4)分别在Block Cache(读缓存),MemStore和Store File(HFile)中查询目标数据,并将查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。

   5) 将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为64KB)缓存到Block Cache。

   6)将合并后的最终结果返回给客户端。

  需要注意的是,读数据的时候,block cache、memstore、storefile中的数据要一起读,读出来之后要做merge(合并),merge的过程中要比较所有读出的数据的时间戳,谁的时间戳大,就返回哪一条数据。此时,磁盘和内存是一起读的,磁盘中的数据读出来之后会放入block cache中,所以,读流程无论如何都会扫描磁盘,也就造成了HBase的读流程要慢于写流程。

  从读写流程的两幅流程图可以看出,HMaster好像并没有参与整个的读写流程,其实Master可以完全不参与读写流程,因为读写数据所需的meta表位置信息是存储在zookeeper的,zookeeper担任了一部分Master与客户端的交互的功能,所以即使Master挂掉了,用户也可以在客户端进行读写。但是如果Master一直处于挂掉的状态,对于HBase集群来说是非常不健康的,比如集群中某个RegionServer出故障挂掉了,那么就无法及时将该RegionServer上的Region转移到其他健康的RegionServer上面。

免责声明:文章转载自《HBase的读写数据流程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#系列之聊聊.Net Core的InMemoryCacheuboot的relocation原理详细分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt Meta Object System-元对象系统

研一的时候开始使用Qt,感觉用Qt开发图形界面比MFC的一套框架来方便的多。后来由于项目的需要,也没有再接触Qt了。现在要重新拾起来,于是要从基础学起。 Now,开始学习Qt事件处理机制。 元对象系统的构成 QObject为所有需要利用元对象系统的对象提供一个基类。 Q_OBJECT宏,在类的声明体内激活meta-object功能,比如动态属性、信号和槽...

Hadoop集群的hbase介绍、搭建、环境、安装

1、hbase的介绍(自行百度hbase,比我总结的全面具体) HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系...

VS环境下用thrift-C/C++接口开发hbase应用

一、前言 用C/C++开发hbase应用,需要用到thrift接口。在windows平台使用Visual Studio时,要比在linux平台复杂一些,主要是因为一些依赖库无法做到自动安装(类似yum install或 apt-get install那样),其次是因为Linux本来就是hbase及其依赖库的原生平台。但总体而言,两个平台的过程大体相似。 开...

tag应用如何根据metadata内容杀指定应用

最近应用开辟的过程当中出现了一个小问题,顺便记录一下原因和方法--tag应用     应用场景:在开辟一体机上具体应用过程当中,发现一体机资源切换及不同的应用应用不同的资源。因为就需要在切换不同的信号源模式下 应用不同的资源。所以就想到应用meta-data这一描述字进行杀死指定的应用。 在AndroidManifest.xml中,<meta-dat...

HBase1.2官方文档——Apache HBase Coprocessors

原文档地址:http://hbase.apache.org/1.2/book.html#cp ApacheHbase协处理器 Apache HBase Coprocessors HBase Coprocessors协处理器是在Google BigTable的协处理器实现之后才建模的 (http://research.google.com/people/je...

Vue 返回上一页,记住上一页的数据

问题:在搜索页面,搜索出饼干商品,点击某饼干商品进入商品详情页,再从商品详情页返回到搜索页面后, 搜索页面应该依旧保留之前的搜索结果。 解决方式 ==============搜索页面路由设置=================================== {// 搜索path: 'search',name: 'search',component:...