作者:用心阁
链接:https://www.zhihu.com/question/20130759/answer/35406376
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
集群的组成HBase的运行时有三个集群:
- Zookeeper集群,负责HBase(当然还有HDFS)集群的协调服务和配置服务。其中的节点是ZooKeeper服务器
- HDFS集群,是一个分布式文件系统,有单一的名字空间。其中的节点有NameNode和DataNode,前者负责存储文件系统的元数据(包括目录名,文件名,等),后则负责存储实际文件的块。
- HBase集群,其中的节点有Master和Region Server
HDFS存储在HBase中,关于数据的元数据也是存储在HBase的表中的,而元数据和数据都通过HDFS文件系统存储。在HDFS中,HBase的文件如下所示:
- /hbase,hbase的根目录
- /hbase/weblogs,一个名为weblogs的表的目录
- /hbase/weblogs/.tableinfo.0000000001,表的元数据信息
- /hbase/weblogs/e048f132e3c5ac596e4fbcc486c0ef6e,表的一个Region目录
- /hbase/weblogs/e048f132e3c5ac596e4fbcc486c0ef6e/.regioninfo,Region的元数据信息
- /hbase/weblogs/e048f132e3c5ac596e4fbcc486c0ef6e/pageviews,Region的一个Column Family目录
- /hbase/weblogs/e048f132e3c5ac596e4fbcc486c0ef6e/pageviews/837a8a7bbf044ed3849b77881a3089a7,Region的HFile
Zookeeper存储不但在HDFS中存储信息,HBase还在Zookeeper中存储信息,其中的znode如下所示:
- /hbase/root-region-server ,Root region的位置
- /hbase/table/-ROOT-,根元数据信息
- /hbase/table/.META.,元数据信息
- /hbase/master,当选的Mater
- /hbase/backup-masters,备选的Master
- /hbase/rs ,Region Server的信息
- /hbase/unassigned,未分配的Region
也就是说,由Zookeeper保持了集群的状态信息
Region Server在来看Region Server,如图所示:

Region Server存储了三部分信息:
- HFile,数据文件,存储在HDFS上
- Write-Ahead Log,重做日志,类似于Oracle的Redo Log和MySQL的Binlog,也存在HDFS上。
- Memstore,内存中的数据缓存,类似Oracle的Buffer Cache。
Region Server fail时重新分配Region
其中HFile和WAL都存储在HDFS上,当Region Server fail的时候,数据是不会丢失的,丢失的只是Memstore中尚没有写入HFile的部分。
Region Server宕机后,该服务器所负责的Region就会变成不可用,HMaster就会根据集群的负载状况,将这些Region分配给其他Region Server。
接手的Region Server从Zookeeper上,以及ROOT表和META表上可以找到充分的元数据信息,数据又是存在HDFS上,由于HDFS会保持多个副本,数据也不会丢,那么Region Server只需要根据这些信息组织起内存结构,并获取WAL文件进行重放,就可以最大程度的恢复到原来那台Region Server宕机前的状态。
当然由于Region Server大多和Data Node在一台服务器上,在写入时,也会调用本地的DFSClient写入,数据块会在本机有一个副本,在另外的机架上有一个副本,还有另外一个随机分配的副本,这样在读写时可以保证Data Locality。如果Region Server接手了一个Region,那么大多数数据块不在本地的Name Node上,读写性能会有下降,但会在后续的Compact过程中逐渐将文件写入本地的Data Node,从而恢复Data Locality。
当然由于HDFS少了一个Data Node,改Data Node上的数据块都少了一个副本,HDFS也会在其他的Data Node上重新建立这些副本,以保证可靠性。
作者:用心阁
链接:https://www.zhihu.com/question/20130759/answer/35406376
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3127143/
,如需转载,请注明出处,否则将追究法律责任。