Zookeeper的做用html
保证任什么时候候,集群中只有一个master
存贮全部Region的寻址入口。
实时监控RegionServer的状态,将Region server的上线和下线信息实时通知给Master
存储Hbase的schema,包括有哪些table,每一个table有哪些column family 缓存
Hmaster的做用 负载均衡
Zookeeper避免了HMaster的单点问题,一个Hbase集群能够启动多个HMaster,而Zookeeper经过Election的方式保证集群中只有一个HMaster处于live的状态。其它都处于休眠的状态,若是HMaster出现问题,则Zookeeper 则唤醒其它休眠的HMaster。性能
一、管理用户对Table的增、删、改、查操做spa
二、管理RegionServer的负载均衡、调整Region的分布server
三、在Region Split后,将新Region分布到不一样的RegionServer。
四、在RegionServer宕机后,那该RegionServer上所管理的Region 由HMaster进行从新分配。
总结HMaster 的主要任务:一、HTable DDL 操做 二、Region 分配工做。 其他的基本上都是client 和RegionServer打交道来完成的。htm
HRegionServer的做用对象
HRegionServer 主要负责相应用户的I/O请求,进而跟HDFS交互,从HDFS中读写数据,虽然每一个进程都很重要,但我的认为HRegionServer是HBase中最核心的进程。
下面对HRegionServer的内部结构作一个简单描述:
HRegionServer 内部管理了一系列的HRegion对象,HRegion和Region是一回事吗?其实HRegion对应了Table中的一个Region,HRegion是对其进行的封装。每一个HRegion中由多个HStore组成。
HStore则对应Table中的Column Family,不论此Column Family 内部有多少数据,都会建立一个新的HStore,所以将相同属性的数据放进相同的Column Family 颇有必要,避免一次访问,访问多个HStore,性能低下。而HStore 则是HBase的核心的存储单元了,而HStore 由两个部分组成,一时MemStore,再就是StoreFile
MemStore 是Sorted Memory Buffer ,client 写入的数据先写入MemStore,当达到MemStore的阀值时,将其Flush 成为一个StoreFile(HFile),StoreFile 则是存储在硬盘上的文件进程
HBase的第一次读写get
参考:http://www.thebigdata.cn/HBase/15305.html
在HBase 0.96之后去掉了-ROOT- Table,只剩下这个特殊的目录表叫作Meta Table(hbase:meta),它存储了集群中全部用户HRegion的位置信息,而ZooKeeper的节点中(/hbase/meta-region-server)存储的则直接是这个Meta Table的位置,而且这个Meta Table如之前的-ROOT- Table同样是不可split的。这样,客户端在第一次访问用户Table的流程就变成了:
从ZooKeeper(/hbase/meta-region-server)中获取hbase:meta的位置(HRegionServer的位置),缓存该位置信息。
从HRegionServer中查询用户Table对应请求的RowKey所在的HRegionServer,缓存该位置信息。
从查询到HRegionServer中读取Row。
从这个过程当中,咱们发现客户会缓存这些位置信息,然而第二步它只是缓存当前RowKey对应的HRegion的位置,于是若是下一个要查的RowKey不在同一个HRegion中,则须要继续查询hbase:meta所在的HRegion,然而随着时间的推移,客户端缓存的位置信息愈来愈多,以致于不须要再次查找hbase:meta Table的信息,除非某个HRegion由于宕机或Split被移动,此时须要从新查询而且更新缓存。
总结
从每一个组件功能能够看出,若是Hmaster挂掉,并不影响数据的读写,而会致使元数据没法修改,以及region的分配工做。