HBase基础知识(三):HBase架构进阶、读写流程、MemStoreFlush、StoreFile Compaction、Region Split

1. 架构原理

1)StoreFile

保存实际数据的物理文件,StoreFile以HFile的形式存储在HDFS上。每个Store会有一个或多个StoreFile(HFile),数据在每个StoreFile中都是有序的。

2)MemStore

写缓存,由于HFile中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会形成一个新的HFile。

3)WAL

由于数据要经MemStore排序后才能刷写到HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Aheadlogfile的文件中,然后再写入MemStore中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

2. 写流程

写流程:

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

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

3)与目标RegionServer进行通讯;

4)将数据顺序写入(追加)到WAL;

5)将数据写入对应的MemStore,数据会在MemStore进行排序;

6)向客户端发送ack;

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

3. MemStoreFlush

MemStore刷写时机(要记住开始往memstore和停止mestore刷写的时机。):

  1. 单个Store来看 memstroe 的大小达到了hbase.hregion.memstore.flush.size(默认值128M),其所在region的所有memstore都会刷写。当memstore的大小达到了hbase.hregion.memstore.flush.size(默认值128M)* hbase.hregion.memstore.block.multiplier(默认值4)时,会阻止继续往该memstore写数据。

  2. 从regionerServer中来看regionserver中memstore的总大小达到java_heapsize*hbase.regionserver.global.memstore.size(默认值0.4)*hbase.regionserver.global.memstore.size.lower.limit(默认值0.95),region会按照其所有memstore的大小顺序(由大到小)依次进行刷写。直到regionserver中所有memstore的总大小减小到上述值以下。当 regionserver 中 memstore 的总大小达到 java_heapsize*hbase.regionserver.global.memstore.size(默认值0.4)时,会阻止继续往所有的memstore写数据。

  3. 到达自动刷写的时间,也会触发memstoreflush。自动刷新的时间间隔由该属性进行配置hbase.regionserver.optionalcacheflushinterval(默认1小时)。

  4. 当 WAL 文件的数量超过 hbase.regionserver.max.logs,region 会按照时间顺序依次进 行刷写,直到 WAL 文件数量减小到 hbase.regionserver.max.log 以下(该属性名已经废弃, 现无需手动设置,最大值为 32)。

4. 读流程

读流程 :发送Get请求,磁盘和内存一起读,为了加速磁盘的读速度,加了一个Block Cache

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)将合并后的最终结果返回给客户端。

5. StoreFile Compaction

由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp) 和不同类型(Put/Delete)有可能会分布在不同的 HFile 中,因此查询时需要遍历所有的 HFile。

为了减少 HFile 的个数,以及清理掉过期和删除的数据,会进行 StoreFile Compaction。 Compaction 分为两种,分别是 Minor Compaction 和 Major Compaction。Minor Compaction 会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但不会清理过期和删除的数据。 Major Compaction 会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且会清理掉过期 和删除的数据。

6. Region Split

默认情况下,每个Table 起初只有一个 Region,随着数据的不断写入,Region 会自动进行拆分。刚拆分时,两个子 Region 都位于当前的 Region Server,但处于负载均衡的考虑, HMaster 有可能会将某个 Region 转移给其他的 Region Server。

Region Split 时机:

1.当1个region中的某个Store下所有StoreFile的总大小超过hbase.hregion.max.filesize, 该 Region 就会进行拆分(0.94 版本之前)。

2.当 1 个 region 中 的 某 个 Store 下所有 StoreFile 的 总 大 小 超 过 Min(R^2 * "hbase.hregion.memstore.flush.size",hbase.hregion.max.filesize"),该 Region 就会进行拆分,其 中 R 为当前 Region Server 中属于该 Table 的个数(0.94 版本之后)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS6.7-64bit编译hadoop2.6.4

1.下载maven(apache-maven-3.3.3-bin.tar.gz) http://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz 2.安装maven tar -zxvf apache-maven-3.3.3-bin.tar.gz -C /usr/local 3.添加环境变量 vim /etc/profileexpo…

第一章节测试

大家在做第一章测试题时,需要复习如下相关知识点:编译型VS解释型、变量名规范、数据类型、程序交互、格式化输出、运算符、流程控制。1.简述编译型与解释型语言的区别,且分别列出你知道的那些语言属于编译型,哪些属于解释型。2.执…

VS2015升级Update2之后Cordova程序提示:此应用程序无法在此电脑上运行

VS2015在升级到Update2之后,有可能出现如下异常,在运行Cordova项目时提示: 查看输出面板会有乱码错误信息: 出现此问题的原因是在于npm程序损坏了。vs调用的npm程序并不是在node安装目录下的npm,而是在: C:…

gitter 卸载_最佳Gitter渠道:学习编码

gitter 卸载by Gitter通过吉特 最佳Gitter渠道:学习编码 (Best Gitter channels for: Learning to Code) If you’re learning to code in 2016, you’re in luck — thanks to a huge range of helpful websites, MOOCs, books, and learners’ communities, you’…

双鉴探测器是哪两种探测方式结合_老师傅带你看懂火灾探测器的种类和基本原理,看完涨知识了...

为什么极早期的火灾探测十分关键?火灾的产生我们生活的环境中充满着大量的可燃物质,空气中的氧气含量通常也足够满足燃烧条件。但是还有另外一个形成火灾的条件就是:点火能量必须可以驱使氧化的过程开始。点火能量源可以是多种多样的&#xf…

JS入门熟知

JS是面向对象的语言 封装继承多态聚集(对象中具有引用其他对象的能力)JS使用中绝大多数情况不需要进行面向对象的设计,很多情况是使用已经设计好,准备好的对象,基于对象的语言. JS的使用(引入) jsp、html中直接在script标签中书写…

c语言专业实习报告,C语言个人实习报告(范文1)

《C语言个人实习报告.doc》由会员分享,可免费在线阅读全文,更多与《C语言个人实习报告》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、好的学习兴趣,独立的编程风格。(组C语言实训报告课题名称:通讯录管理系统…

分析不同类型页面渲染过程

现在让我们看看浏览器从网络上加载资源所耗费的时间(我们忽略从缓存以及从CDN等中间商网络上加载资源),我们首先要知道的是: 一个到无服务的网路往返 (传播延迟) 大约100ms服务器对于HTML文档的响应大约100ms,对于其他…

引入 javascript_在您JavaScript项目中引入类型安全性? 再想一想

引入 javascriptby James Wright詹姆斯赖特(James Wright) 在您JavaScript项目中引入类型安全性? 再想一想 (Introducing Type Safety To Your JavaScript Project? Think Again) 更新— 2017年2月1日 (Update — 1st February 2017) I’ve heard various counter…

劣币驱逐良币通俗解释_如何通俗理解劣币驱逐良币的问题,同时如何扭转这个现象?...

以牛奶为例谈劣币驱逐良币。【原来】大家都卖的纯正的纯牛奶,因为。牛奶的来源和生产工艺基本上都差不多,所以说产品的品质也没有什么大的差异。【后来】奶制品企业为了争夺市场开始打价格战,你卖5块我就卖4块,你卖4块我就卖3块5&…

c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...

我线程函数定义在对话框类的实现文件中需要访问对话框类头文件中声明的变量怎么才可以?i_noname(晚九朝五) 于 2005-9-15 16:14:25DWORD WINAPI Proc(LPVOID lpParameter ){CDialog *pDlg (CDialog *)lpParameter;...}启用线程时把对话框指针传进去AfxBeginThread(…

Android内存优化——内存泄露检测分析方法

上一篇文章总结了一些常见的内存泄露场景及优化方案,这篇文章继续总结内存泄露的一些常用的检测和分析方法。 Lint代码检查 AndroidStudio自动Lint代码检查工具,一些常见的代码警告Lint工具都会给我们提示。使用也比较简单: Analyze —> I…

ImageLoader加载图片

先导universal-image-loader-1.9.3包 在application配置 android:name".MyApplication" intent权限 1 package com.ch.day13_imageloaderdemo;2 3 import java.io.File;4 5 import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; 6 impor…

hackintosh黑苹果_为什么您的下一个Mac应该是Hackintosh?

hackintosh黑苹果by Sebastian Dobrincu塞巴斯蒂安多布林库(Sebastian Dobrincu) 为什么您的下一个Mac应该是Hackintosh? (Why Your Next Mac Should Be a Hackintosh ?) I just finished a 48-hour Hackintosh building marathon. It was a fun experience and I…

一张图解释什么是遗传算法_遗传算法简介及代码详解

(allele)数据值,属性,值基因座(locus)位置,iterator位置表现型(phenotype)参数集,解码结构,候选解染色体:又可以叫做基因型个体(individuals)群体/种群(population):一定数量的个体组成&#xf…

c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc

《c语言程序设计报告-学生信息管理系统》中南大学??C语言程序设计实践报告?????题 目 学生信息管理系统学生姓名 张眼指导教师 刘伟荣学 院 信息科学与工程学院专业班级 电气信息1113班完成时间 2012年6月28日星期四?1.设计任务及设计目标学生信息管理系统是基于系统主…

ListString 和 ArrayListString的区别

最近对这两个问题比较懵逼&#xff0c;关于List和ArrayList、List<String> list new ArrayList<String>(); 好了&#xff0c;先搞明白List 和 ArrayList吧。 List是一个接口&#xff0c;是Collection接口的一个子接口&#xff0c;是一个有序的集合。 ArrayList是L…

java城市级联一次查询_我的城市没有任何设计活动,所以我自己组织了一次。...

java城市级联一次查询by Marty Laurita由Marty Laurita 我的城市没有任何设计活动&#xff0c;所以我自己组织了一次。 (There weren’t any design events in my city, so I organized one myself.) “The meeting of two personalities is like the contact of two chemical…

Access denied for user 'root'@'localhost' (using password: YES) 问题解决小记

初学php&#xff0c;按照视频安装后好mysql后 终端运行命令 mysql -u root -p 然后输入安装mysql时输入的密码六个1&#xff0c;会报这样的错误&#xff1a;Access denied for user rootlocalhost (using password: YES) &#xff1b; 百度了一大堆&#xff0c;大海捞针一般找…

汇编总结2

一、寄存器 一个典型的cpu是由运算器&#xff0c;控制器&#xff0c;寄存器等器件组成的。 内部总线实现CPU内部各个器件之间的联系 外部总线实现cpu和主板上其他器件的联系 AX,BX,CX,DX通用寄存器 SI,DI,BP,SP基址和变址寄存器 CS,SS,DS,ES段寄存器 IP,FLAGS指令指针和标志寄存…