HDFS架构


发布于 2024-07-20 / 26 阅读 / 0 评论 /
HDFS架构经历过几次挑战

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。