Hbase系统架构简述
程序员文章站
2023-11-28 00:03:04
由于最近要开始深入的学习一下hbase,所以,先大概了解了hbase的基本架构,在此简单的记录一下。 Hbase的逻辑视图 Hbase的物理存储 HRegion Table中所有行都按照row key的字典序排列。 Table在行的方向上分割为多个HRegion。 HRegion按大小分割的,每个表 ......
由于最近要开始深入的学习一下hbase,所以,先大概了解了hbase的基本架构,在此简单的记录一下。
hbase的逻辑视图
hbase的物理存储
hregion
- table中所有行都按照row key的字典序排列。
- table在行的方向上分割为多个hregion。
- hregion按大小分割的,每个表开始只有一个hregion,随着数据增多,hregion不断增大,当增大到一个阀值的时候,hregion就会等分会两个新的hregion,之后会有越来越多的region。
- hregion是hbase中分布式存储和负载均衡的最小单元,不同hregion分布到不同hregionserver上。
store
- hregion虽然是分布式存储的最小单元,但并不是存储的最小单元。
- hregion由一个或者多个store组成,每个store保存一个columns family。 所以,每个column family存储在hdfs上的一个单独文件中,空值不会被保存。
- 每个hrtrore又由一个memstore和0至多个storefile组成,storefile包含hfile。
- memstore存储在内存中,storefile存储在hdfs上。
hbase基本组件
client
- 包含访问hbase的接口,并维护cache来加快对hbase的访问,比如hregion的位置信息。
master
- 为hregionserver分配hregion:比如在hregion split时分配新的hregion;在hregionserver退出时迁移其内的hregion到其他hregionserver上
- 负责hregionserver的负载均衡
- 发现失效的hregionserver并重新分配其上的hregion
- 管理用户对table的增删改查操作
- 管理namespace和table的元数据
- 权限控制(acl)
hregionserver
- hregionserver维护hregion,处理对这些hregion的io请求
- 存放和管理本地hregion
- 读写hdfs,管理table中的数据 hregionserver负责切分在运行过程中变得过大的hregion
- client直接通过hregionserver读写数据(从hmaster中获取元数据,找到rowkey所在的hregion/hregionserver后)
zookeeper
- 通过选举,保证任何时候,集群中只有一个master,master与regionservers 启动时会向zookeeper注册
- 存贮所有region的寻址入口
- 实时监控region server的上线和下线信息。并实时通知给master
- 存储hbase的schema和table元数据
zookeeper的引入使得master不再是单点故障
上图清晰的表达了hmaster和namenode都支持多个热备份,使用zookeeper来做协调。
- zookeeper一般由三台机器组成一个集群,内部使用paxos算法支持三台server中的一台宕机,也有使用五台机器的,此时则可以支持同时两台宕机,既少于半数的宕机。
- 然而随着机器的增加,它的性能也会下降。
- regionserver和datanode一般会放在相同的server上实现数据的本地化。
协同工作
- hbase client通过rpc方式和hmaster、hregionserver通信。
- 一个hregionserver可以存放1000个hregion。
- 底层table数据存储于hdfs中,而hregion所处理的数据尽量和数据所在的datanode在一起,实现数据的本地化。
- 数据本地化并不是总能实现,比如在hregion移动(如因split)时,需要等下一次compact才能继续回到本地化。
hbase的数据恢复
hlog
- 每个hregionserver中都有一个hlog对象,hlog是一个实现write ahead log的类。
- 在每次用户操作写入memstore的同时,也会写一份数据到hlog文件中。
- hlog文件定期会滚动出新的,并删除旧的文件(已持久化到storefile中的数据)。
恢复过程
- 当hregionserver意外终止后,hmaster会通过zookeeper感知到。
- hmaster首先会处理遗留的hlog文件,将其中不同region的log数据进行拆分,分别放到相应region的目录下。
- 然后再将失效的region重新分配,领取到这些region的hregionserver在load region的过程中,会发现有历史hlog需要处理。
- 因此会replay hlog中的数据到memstore中,然后flush到storefiles,完成数据恢复。
- 示意图:
-
hbase的容错
hregionserver
- hregionserver定时向zookeeper汇报心跳。
- 如果一旦时间内未出现心跳,hmaster将该regionserver上的region重新分配到其他regionserver上。
- 失效服务器上“预写”日志由主服务器进行分割并派送给新的hregionserver。
hmaster
- 当现有hmaster出现灾难无法运转,zookeeper会重新选择一个新的master,从而保障master不再是单点故障。
- 无master过程中,数据读取仍照常进行。
- 无master过程中,region切分、负载均衡等无法进行。
zookeeper
- zookeeper是一个可靠地服务,一般配置3或5个zookeeper实例。
- region定位流程:zookeeper--> -root-(单region)--> .meta.--> 用户表
本文只是简单介绍一下hbase系统架构,后续会详细地补充。
上一篇: 大数据学习之路(跟着大神学习一波)
下一篇: Symfony2开发之控制器用法实例分析
推荐阅读
-
《解剖PetShop》之一:PetShop的系统架构设计
-
ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
-
web服务器和应用服务器的区别是什么,简述两者的架构与工作原理
-
android操作系统是什么公司开发的,简述android的发展历史
-
基于springboot搭建的web系统架构的方法步骤
-
android操作系统是什么公司开发的,简述android的发展历史
-
MVC+EasyUI+三层架构简单权限管理系统
-
web服务器和应用服务器的区别是什么,简述两者的架构与工作原理
-
《解剖PetShop》之一:PetShop的系统架构设计
-
大流量网站的底层系统架构分析