HBase核心功能模块--读书笔记
客户端Client
客户端 Client 是整个 HBase 系统的入口。使用者直接通过客户端操作 HBase。客户端
使用 HBase 的 RPC 机制与 HMaster 和 RegionServer进行通信。对于管理类操作,Client 与
HMaster 进行 RPC 通信;对于数据读写类操作,Client 与RegionServer 进行 RPC 交互。这里
客户端可以是多个,并不限定是原生 Java 接口,还有 Thrift、Avro、Rest等客户端模式,甚
至 MapReduce 也可以算作一种客户端。
协调服务组件Zookeeper
ZooKeeper Quorum(队列)负责管理 HBase 中多 HMaster 的选举、服务器之间状态同
步等。再具体一些就是,HBase 中 ZooKeeper 实例负责的协调工作有:存储 HBase 元数据信
息、实时监控 RegionServer、存储所有 Region 的寻址入口,当然还有最常见的功能就是保证
HBase 集群中只有一个HMaster 节点
主节点Hmaster
HMaster 没有单点问题,在HBase 中可以启动多个 HMaster,通过ZooKeeper 的 Master
选举机制保证总有一个 Master 正常运行并提供服务,其他 HMaster 作为备选时刻准备(当目
前 HMaster 出现问题时)提供服务。HMaster 主要负责Table 和 Region 的管理工作:
管理用户对 Table 的增、删、改、查操作。
管理 RegionServer 的负载均衡,调整 Region 分布。
在 Region 分裂后,负责新 Region 的分配。
在 RegionServer 死机后,负责失效 RegionServer 上的 Region 迁移。
Region 节点 HRegionServer
HRegionServer 主要负责响应用户 I/O 请求,向 HDFS 文件系统中读写数据,是 HBase
中最核心的模块。HRegionServer 内部管理了一系列 HRegion对象,每个 HRegion 对应了
Table 中的一个Region。HRegion 由多个HStore 组成,每个 HStore 对应了Table 中的一个
Column Family 的存储。可以看出每个 Column Family 其实就是一个集中的存储单元,因
此最好将具备共同 I/O 特性的列放在一个 Column Family 中,这样能保证读写的高效性。
HStore 存 储 是 HBase 存 储 的 核 心, 由 两 部 分 组 成:MemStore 和
StoreFile。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入 MemStore 中,当
MemStore 满了以后会缓冲(flush)成一个 StoreFile(底层实现是 HFile) ,当 StoreFile 文件数
量增长到一定阈值,会触发 Compact 操作,将多个StoreFiles 合并成一个 StoreFile,在合并
过程中会进行版本合并和数据删除,因此可以看出 HBase 其实只有增加数据,所有的更新和
删除操作都是在后续的 Compact 过程中进行的,这使得用户的写操作只要进入内存中就可以
立即返回,保证了 HBase I/O 的高性能。
StoreFiles 在触发 Compact 操作后,会逐步形成越来越大的 StoreFile,当单个StoreFile
大小超过一定阈值后,会触发 Split 操作,同时把当前Region 分裂成 2 个 Region,父 Region
会下线,新分裂的 2 个子 Region 会被HMaster 分配到相应的 HRegionServer 上,使得原先 1
个 Region 的压力得以分流到 2 个 Region 上。
每个 HRegionServer 中都有一个 HLog 对象,HLog 是一个实现 Write Ahead Log 的类,
在每次用户操作写入 MemStore 的同时,也会写一份数据到HLog 文件中,HLog 文件定期
会滚动出新,并删除旧的文件(已持久化到 StoreFile 中的数据) 。在 HRegionServer 意外终
止后,HMaster 会通过 ZooKeeper 感知到,首先处理遗留的 HLog 文件,将其中不同 Region
的 Log 数据进行拆分,分别放到相应 Region 的目录下,然后再将失效的 Region 重新分配,
领取到这些 Region 的 HRegionServer 在加载 Region 的过程中,会发现有历史 HLog 需要处
理,因此会将 HLog 中的数据回放到 MemStore 中,然后缓冲(flush)到 StoreFiles,完成数
据恢复。
HBase核心功能模块--读书笔记的更多相关文章
- 二、 HBase核心功能模块。
Hadoop 框架包含两个核心组件: HDFS 和 MapReduce 其中 HDFS 是文件存储系统,负责数据存储: MapReduce 是 ...
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(三)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- 【转】《windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
- 《python核心编程》--读书笔记 第21章 数据库编程
准备:今天拿笔记本装了mysql,这样就能在不同地方用其他电脑远程访问同一个数据库了. python安装MySQLdb模块:http://www.codegood.com/downloads. 21. ...
随机推荐
- 108.UIView关于布局和约束的方法(AutoLayout)
http://blog.csdn.net/wangyanchang21/article/details/52270136 关于布局(UIViewHierarchy) 1.layoutSubviews ...
- BZOJ3926:[ZJOI2015]诸神眷顾的幻想乡(广义SAM)
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- 【php】获取ip
addBoard.php中获取到ip $ip=$_SERVER['REMOTE_ADDR']; 通过ajax采取POST方式发送到服务器 $("#submit").on(" ...
- Owin+ASP.NET Identity浅析系列(五)接入第三方登录
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… OK,用户角色实现后,我们回 ...
- RedHat(小红帽)下 yum用不了的解决办法
由于RedHat是商业版的,通常由于没有注册,导致yum程序无法使用(linux下面,yum是个安装软件的“神器”).此时可用CentOS的地址进行替换.下面将一步步说明如何处理: 一.删除RedHa ...
- 【Step By Step】将Dotnet Core部署到Docker下
一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core—使用.Net Core + Entity FrameWor ...
- 我的QT5学习之路(一)——浅谈QT的安装和配置
一.前言 说到Qt,不能不说到C++,这门伟大的语言.因为其面向对象的编程思想和陡峭的学习曲线,一开始学习起来很是吃力.Qt从QT4开始基本封装了很多C++的工具库和界面库,而且支持跨平台,这是它最大 ...
- 【HTML-进阶-如何实现父级块级元素宽度自适应子元素宽度】
背景 块级元素宽度默认值为100%,而不是auto;因此其宽度不会根据子元素内容动态适应. 如何实现父级元素宽度动态适应其子元素. 方法一 display:inline; 给块级元素设置inline- ...
- Linux系统调用原理
操作系统通过系统调用为运行于其上的进程提供服务. 当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始执行一个 内核函数 . 内核函数负责响应应用程序的要求,例如操作文件.进行网络通讯或者 ...
- Swift基础学习笔记 一
之前学习过一段时间swift,由于目前开发的项目还是用的OC,一段时间不看swift又基本忘干净了,好记性不如烂笔头,还是用博客记录一下自己学的东西吧. 基本数据类型: 1.常量(let)和变量(va ...