HDFS经历过以下架构演进过程。
1.HDFS主从架构
如下图所示:
HDFS时一个主从架构分布式集群。
1.1.Hadoop主从架构角色
Active NameNode是主节点,负责维护整个集群的命名空间和元数据管理,并管理集群中所有的DataNode,元数据都加载到内存中。
Secondary NameNode是备节点,负责为NameNode承担元数据checkpoint的工作,为NameNode减轻工作压力。
DataNode是HDFS集群的数据节点,负责管理和维护NameNode非配给自己的文件数据块副本。并定时向NameNode上传心跳和节点数据信息。
1.2.Hadoop主从架构要解决的问题
此版本的Hadoop是初试版本,我们可以称之为Hadoop-v1。
Hadoop-v1主要是解决大数据最基本的两个问题:一是大数据下的存储;另一个是大数据下的计算。
1.3.Hadoop主从架构的缺点
Hadoop-v1也带来了两个缺点:
(1)单点故障问题:Active Namenode挂掉,集群就不可用,Standby NameNode还无法起到故障故障转移的作用。
(2)内存受限问题:Namenode的元数据信息存储在内存中,如果数据量够大,容易把内存耗尽,集群将进入不可用状态。
2.HDFS HA架构
HDFS高可用架构如下图所示:
3.HDFS联邦架构
HDFS Federation主要是为了解决NameNode水平扩展问题,HDFS Federation可使用多个独立的NameNode。
HDFS联邦有两种不同的架构:一种是基于独立的DataNode,另一种是独立的Block Pool。
3.1.基于独立DataNode的HDFS联邦
架构如下图所示:
客户端可通过ViewFS来对联邦下的NN-1和NN-2进行访问。
3.2.基于独立Block Pool的HDFS联邦
架构如下图所示:
联邦下的NN-1和NN-2都使用相同的DataNode,但是使用互不相同的Block Pool来进行隔离。
4.HDFS Router架构
HDFS Router-based Federation,简称RBF,在联邦架构的基础上,加Router组件,架构如下图所示:
RBF中新增了两个角色:Router和StateStore
4.1.Router角色
Router主要用于以下工作:
(1)Federated interface:与NameNode有相同的借口,可以直接接收客户端请求,并将请求转发到正确的集群中(比如NN-1、NN-2、或NN-3)。
(2)NameNode heartbeats:Router会监控NameNode的状态和心跳信息,并将心跳信息存储到State Store,主要是HA State以及负载情况。
一般来说,会在每个NameNode节点上再启动一个Router组件。但是为了高可用和灵活性,会使用多个Router监控同一个NameNode,这样即使Router失败,也不会有问题。
客户端配置了所有Router的endpoints,单个Router失败,客户端也可以请求到其他Router。另外Router本身异常,也会自动进入安全模式而不提供服务。
4.2.State Store角色
State Store顾名思义,就是状态存储,默认实现是Zookeeper。
State Store具体的工作有:
(1)存储Mount Table,也就是文件夹与子集群(NN-{i})的映射关系。
(2)存储Membership Table,也就是Router监控的NameNode的信息。
(3)存储Router本身心跳信息。
4.3.客户端请求流程
从整个架构来看,客户端请求需要经过以下过程:
(1)客户端发送读或写请求到随机的Router。
(2)被请求的Router会从State Store中的Mount Table中找到实际文件路径的子集群。
(3)Router同时会通过State Store中的Membership Table,确认正确的NameNode,同时会检查该集群中目标NameNode的状态。
(4)Router将请求转发到目标NameNode。