本节内容,大多是从网络上汇总而来,并做了一定总结修改。
由图可知HBase建立在Hadoop之上,HBase底层使用的是Hadoop的HDFS。准确的说HBase建立在HDFS之前,并不依赖于Hadoop。 HBase包含3个重要组件:Zookeeper、HMaster和HRegionServer。 (1)Zookeeper 为整个HBase集群提供协助服务,包括:
1)存放整个 HBase集群的元数据以及集群的状态信息。
2)实现HMaster主从节点的failover。
ZooKeeper为HBase集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive等),并且会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的failover,或对宕机的HRegionServer中的HRegion集合的修复(将它们分配给其他的HRegionServer)。ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性。 (2)HMaster 主要用于监控和操作集群中的所有HRegionServer。HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的MasterElection机制保证总有一个Master在运行 主要负责Table和Region的管理工作:
1)管理用户对表的增删改查操作
2)管理HRegionServer的负载均衡,调整Region分布
3)Region Split后,负责新Region的分布
4)在HRegionServer停机后,负责失效HRegionServer上Region迁移
(3)HRegionServer HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据。
1)存放和管理本地HRegion。
2)读写HDFS,管理Table中的数据。
3)Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
每个column family存储在HDFS上的一个单独文件中,空值不会被保存。
Key 和 Version number在每个 column family中均有一份;
HBase 为每个值维护了多级索引,即:<key, column family, column name, timestamp>
物理存储:
(1)Table中所有行都按照row key的字典序排列;
(2)Table在行的方向上分割为多个Region;
(3)Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;
(4)Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。