图1 HBase存储架构图
Table & Region
Table逻辑上以Region的形式保存在RegionServer中。当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey, endkey]表示,不同的region会被Master分配给相应的RegionServer进行管理:
HBase中有两张特殊的Table,-ROOT-和.META.
ü .META.:记录了用户表的Region信息,.META.可以分裂成多个regoin
ü -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
ü Zookeeper中记录了-ROOT-表的location
META 表存储了所有的用户Region的信息,同时包括HReginServer对象的信息,其中有每一个行值的开始到结束的键值,一个表是否有效或失效,每一个HReginServer的地址,等等。META 表的大小随着用户Region的增加而增加。
ROOT表被限制在一个区域中,它指定了所有的META表信息。这些信息包括每一个META所处的区域和HReginServer信息。
ROOT表和META表每一行的大小大概是1KB左右。每一个区域的大小是256MB,这意味着ROOT表可以装载2.6 x 105 META区域,转化成用户区域就是6.9 x 1010,转化成可以存储的字节数就是1.8 x 1019 。
Zookeeper
Zookeeper是Hadoop的正式子项目,应该不属于HBase,Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单点问题,当HMaster挂了之后能协调产生新的HMaster,假如没有配置Zookeeper,Zookeeper的部分功能由Master自己完成,HBase还是存在单点问题。
Hbase Client
HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC。
假如配置中存在Zookeeper,Client访问用户数据之前需要首先访问zookeeper,一旦ROOT区域被找到以后,Client就可以通过扫描ROOT区域找到相应的META区域去定位实际提供数据的HReginServer。
当定位到提供数据的HReginServer以后,Client就可以通过这个HReginServer找到需要的数据了。
这些信息将会被Client缓存起来,当下次请求的时候,就不需要重复查找。
当这些区域中的某个区域不可用的时候,Client将会逆向执行上面的过程,直到找到实际提供数据的HReginServer为止。
Hbase Master
主要负责Table和Region的管理工作:
1) 管理用户对Table的增、删、改、查操作
2) 管理HRegionServer的负载均衡,调整Region分布
3) 在Region Split后,负责新Region的分配
4) 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移
同时HBaseMaster还含有一个指向包含有ROOT区域的HReginServer地址。同时,HBaseMaster会监控每一台HReginServer的健康状况,如果某一台HReginServer不可用,它将会把不可用的HReginServer来提供服务的HLog和表由其他HReginServer来提供。
与 Bigtable不同的是,如果没有Zookeeper,HBaseMaster失效了,整个集群就会关闭。在Bigtable中,即使Master机器失效了,Tabletserver还是可以提供服务的。Bigtable使用了而外的锁管理机制,而我们的HBase使用的单点访问模式:所有的HReginServer都访问HBaseMaster。
HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。。HReginServer通过与HBaseMaster通信获取自己需要服务的数据表,并向HBaseMaster反馈自己的运行状况。
HRegionServer
HRegionServer管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,因此最好将具备共同IO特性的column放在同一个Column Family中,这样最高效。
HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。下图描述了Compaction和Split的过程:
Write Requests
当一个写的请求到来的时候,它首先会写到一个叫做HLog的write-ahead-log中,再写入MemStore。每一个HStore只能有一个MemStore。
Read Requests
当一起读取的请求到来的时候,HReginServer会先在MemStore中寻找该数据,当找不到的时候,才会去在StoreFile中寻找。
Cache Flushes
当MemStore到达配置的大小以后,将会创建一个HFile,将其写到磁盘中去。这将减少HReginServer的内存压力。
在读和写的过程中,Cache flushes将会经常发生。当创建一个新的StoreFile的时候,读和写的操作会被挂起,知道新的StoreFile创建好,并被加入到HStroe的管理中后才可以使用。
Compactions
当一定数量的StoreFile超过一个配置的阀值之后,压缩操作就会开始执行。压缩操作的主要工作就是周期性地将一些StoreFile合并成一个StoreFile。
在执行压缩操作的过程中,HReginServer的读和写操作将被挂起,直到操作执行完毕。
Region Splits
当一个HStore所管理的StoreFile超过一个配置(当前是256MB)的值以后,将会执行Region的切分操作。Region的切分操作将原先的Region对半分割为2个新的Region。
在进行Region切分的操作过程中,读和写的操作将被挂起,直到完成为止。
相关推荐
大数据技术的框架视图整理,包括hadoop,spark,storm,hbase,大数据分析平台总体架构
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Hadoop包含了MapReduce、HDFS、HBase、Hive、Zookeeper、Pig、Sqoop等 BDAS包含了Spark、Shark(相当于Hive)、BlinkDB、Spark Streaming(消息实时处理框架,类似Storm)等等 3. Spark与MapReduce 优势: ...
整理完备的大数据高频面试题,非常适合突击面试的同学进行知识点的巩固,面试题非常完备,包含hadoop,spark,hbase,hive等大数据框架常用常考的知识点
hbase mongodb strom spark java语言 语言语法基础 异常 泛型 内部类 反射 序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符...
本模块通过学习HDFS,YARN(MapReduce)Spark 等核 ⼼组件,了解Hadoop 的基本运⾏框架。 所以在第⼆部分的学习中我们需要达到以下⽬标: 1、 搭建单节点模拟分布式集群,熟悉 HDFS 命令; 掌握 HDFS 体系结 构,读写...
(20天) 3)淘宝商城 项⽬ (千⽜客户端部分)(实现典型的⼏个模块) (20天) 今天为⼤家整理了部分⼤数据学习教程与⼤家共享,每个⼈可以根据⾃⼰的需要来选择,需要的⼩伙伴可以+下学习资料分享裙 199加上427 ...
注:数据研发侧重组件框架原理和编程实践经验,在面试中也会问到数据结构与算法、机器学习算法等。以下试题为作者日常整理的通用高频面经,包含题目,答案与参考文章,欢迎纠正与补充。 _ _ _ _ 目录 1.linux常用...
下面是店铺为您精心整理的大数据架构师的岗位职责。 大数据架构师的岗位职责1 职责: 1、负责公司大数据产品的架构设计,包含数据收集、数据存储、数据应用,并完成相关架构设计文档的撰写; 2、参与规划从数据源到...
自己很早就想搞一个总的仓库就是将自己平时遇到的和学习到的东西整合在一起,方便后面用的时候快速的查找与使用,之前是通过branch的方式去整理,感觉不直观,一咬牙就花了点时间将所有的分支整合在一起(之前使用...