HBase集群
集群架构图
HBase架构篇
HBase架构组成
HBase采用Master/Slave架构搭建集群,它隶属于Hadoop生态系统,由一下类型节点组成: HMaster 节点、
HRegionServer 节点、 ZooKeeper 集群,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等,总体结构如下:
ZooKeeper集群用于:
ZooKeeper为HBase集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive等),并且会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的failover,或对宕机的HRegionServer中的HRegion集合的修复(将它们分配给其他的HRegionServer)。ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性。
-
存放整个 HBase集群的元数据以及集群的状态信息。
-
实现HMaster主从节点的failover。
HMaster节点用于:
HMaster没有单点故障问题,可以启动多个HMaster,通过ZooKeeper的Master Election机制保证同时只有一个
HMaster出于Active状态,其他的HMaster则处于热备份状态。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。要有两方面的职责:
-
管理HRegionServer,实现其负载均衡。
-
管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
-
实现DDL操作(Data Definition Language,namespace和table的增删改,column familiy的增删改等)。
-
管理namespace和table的元数据(实际存储在HDFS上)。
-
权限控制(ACL)。
HRegionServer节点用于:
HRegionServer一般和DataNode在同一台机器上运行,实现数据的本地性。HRegionServer包含一个WAL即Write Ahead Log一个BlockCache和多个HRegion
-
存放和管理本地HRegion。
-
读写HDFS,管理Table中的数据。
-
Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的
HRegion/HRegionServer后)。
Log
WAL即Write Ahead Log,在早期版本中称为HLog,它是HDFS上的一个文件,如其名字所表示的,所有写操作
都会先保证将数据写入这个Log文件后,才会真正更新MemStore,最 保证HRegionServer宕机后,我们依然可
以从该Log文件中读取数据,Replay所有的操作,而不至于数据丢失。这个Log文件会定期Roll出新的文件而删
除旧的文件(那些已持久化到HFile中的Log可以删除)。
BlockCache
BlockCache是一个读缓存,即“引用局部性”原理(也应用于CPU,分空间局部性和时间局部性,空间局部性
是指CPU在某一时刻需要某个数据,那么有很大的概率在一下时刻它需要的数据在其附近;时间局部性是指某
个数据在被访问过一次后,它有很大的概率在不久的将来会被再次的访问),将数据预读取到内存中,以提
升读的性能。
HRegion
HBase使用RowKey将表水平切割成多个HRegion,从HMaster的角度,每个HRegion都纪录了它的StartKey和
EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。HRegion由HMaster分配到相应的HRegionServer中,然后由HRegionServer负责HRegion的启动和管理,和Client的通信,负责数据的读(使用HDFS),HRegion由多个Store(HStore)构成
-
HStore
每个HStore对应了一个Table在这个HRegion中的一个Column Family,即每个Column Family就是一个集中的存储单元,因而最好将具有相近IO特性的Column存储在一个Column Family,以实现高效读取(数据局部性原理,可以提高缓存的命中率)。HStore是HBase中存储的核心,它实现了读写HDFS功能,一个HStore由一个MemStore 和0个或多个StoreFile组成。
-
MemStore
是一个写缓存(In Memory Sorted Bu?er),所有数据的写在完成WAL日志写后,会 写入MemStore
中,由MemStore根据一定的算法将数据Flush到地层HDFS文件中(HFile),通常每个HRegion中的每个
Column Family有一个自己的MemStore。 -
HFile(StoreFile)
用于存储HBase的数据(Cell/KeyValue)。在HFile中的数据是按RowKey、Column Family、
Column排序,对相同的Cell(即这三个值都一样),则按timestamp倒序排列。
-
集群搭建
注意:确保HDFS HA集群运行正常
-
安装
[root@nodeX ~]# tar -zxvf hbase-1.2.4-bin.tar.gz -C /usr
-
修改配置文件
[root@nodeX ~]# vi /usr/hbase-1.2.4/conf/hbase-site.xml
<property> <name>hbase.rootdir</name> <value>hdfs://mycluster/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>node1,node2,node3</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property>
[root@nodeX ~]# vi /usr/hbase-1.2.4/conf/regionservers
node1 node2 node3
[root@nodeX ~]# vi .bashrc
HBASE_MANAGES_ZK=false HBASE_HOME=/usr/hbase-1.2.4 HADOOP_HOME=/usr/hadoop-2.6.0 JAVA_HOME=/usr/java/latest CLASSPATH=. PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin export JAVA_HOME export CLASSPATH export PATH export HADOOP_HOME export HBASE_HOME export HBASE_MANAGES_ZK
[root@nodeX ~]# source .bashrc
-
启动服务
[root@nodeX ~]# hbase-daemon.sh start master [root@nodeX ~]# hbase-daemon.sh start regionserver