HDFS架构演变之路

前言

Hadoop到目前为止发展已经有10余年,版本经过了无数次的更新迭代,目前业内大家把Hadoop大的 版本分为Hadoop1,hadoop2,Hadoop3三个版本。

1 hadoop1

hadoop1版本刚出来的时候是为了解决两个问题:

  • 海量数据如何存储的问题
  • 海量数据如何计算的问题

Hadoop1的核心设计就是HDFS和Mapreduce。

2 HDFS1架构

HDFS1是一个主从式的架构,主节点只有一个叫NameNode。从节点有多个叫DataNode。

2.1 NameNode

  • 管理元数据信息(文件目录树):文件与Block块,Block块与DataNode主机的关系。
  • NameNode为了快速响应用户的操作请求,所以把元数据加载到了内存里面。

2.2 DataNode

  • 存储数据,把上传的数据划分成为固定大小的文件块。(Hadoop1,默认是64M。Hadoop2,128M)
  • 为了保证数据安全,每个文件块默认都有三个副本。

3 HDFS1的架构缺陷

虽然HDFS1当初设计出来可以解决海量数据存储的问题,但在使用的过程中慢慢的出现了一些缺陷,其中主要为以下两点:

  • 单点故障问题
  • 内存受限问题

3.1 单点故障

单点故障顾名思义就是单个节点发生了问题,导致HDFS出现了致命的缺陷。我们都知道HDFS集群是有多个节点组成的,其中最为重要的节点就是NameNode所在的节点。NameNode掌管着所有数据存储的元数据信息。一旦NameNode发生故障则整个HDFS就不可用了。

3.1.1 高可用

那么HDFS为了解决这个问题,就提出了高可用的方案,意思就是多一个NameNode,当其中一个挂了或失去通讯的时候,另外一个可以替代,从而维持HDFS的可用性,实现自动容灾的功能。

为了实现自动容灾,可以引入第三方框架集群,这里zookeeper就登场了。zookeeper在与NameNode进行通讯的时候会创建一把锁,持有这把锁的NameNode则被当作active NameNode,另外备份的NameNode被当作standby NameNode。同时后台还会起一个监听的线程ZKFC来监测NameNode。一旦监测到active NameNode出现问题,则standby NameNode自动切换。

3.1.2 数据一致性问题

引入另外一个NameNode就要考虑数据一致性的问题。当前的NameNode挂掉情况下,高可用的NameNode顶上的时候若是与之前挂掉的NameNode元数据信息保存不一致的话,则会发生一些请求找不到对应数据的情况。会让我们从主观意识的数据缺失了。

3.1.3 JournalNode

那么为了避免这一现象的发生就要保持数据的一致性。这里HDFS引入了共享文件系统的概念,它会在后台启动一定数量的JournalNode进程(同步存储元数据,压力较小),组成一个共享的文件系统,存储元数据(editlog)。当然journalNode本身也是实现高可用的。active NameNode将元数据实时写入JournalNode,standby NameNode实时读取元数据信息,从而维持active NameNode,standby NameNode两者元数据一致。

image.png

3.2 内存受限

高可用方案让单点故障问题得以解决。也让我们知道了NameNode的重要性,我们之所以能这么快的通过NameNode检索到存储在DataNod的数据,是因为NameNode将元数据都读取到内存中,检索效率大大超于磁盘。

那么随着数据的日积月累,元数据的越来越庞大,NameNode的内存是否够存在受限。答案是一定存在的,NameNode本身也是一台服务器,装配的内存肯定是受限的。那么当内存受限的时候,添加这台的内存也是可以临时解决燃眉之急的。但却治标不治本。我们本身集群由这么多台服务器组成,一台节点的内存不够用,可以利用其他的服务器内存来完成这数据的检索。

所以,这里HDFS就运用了联邦机制(Federation)。

3.2.1 联邦机制(Federation)

联邦机制的原理就是将NameNode划分为不同的命名空间并进行编号(这里可以想像成计算机中的C,D,E盘等)。不同的命名空间之间互不干扰。在DataNode中创建目录,此目录对应命名空间的编号。由此,编号相同的数据由对应的命名空间进行管理。当然为了避免单点故障问题,依旧采用高可用方案。

image.png

HDFS2架构

由此,HDFS解决了单点故障和内存受限的问题,HDFS1也进入了HDFS2的时代,这也是我们现在经常使用的版本,也是相对稳定版本。

  • HA方案(High Available)
解决HDFS1 NameNode单点故障问题。
  • 联邦方案
解决了HDFS1 内存受限问题。

HDFS3架构

至于HDFS3是在HDFS2的基础上优化了HA方案,并加入了纠删码的技术。

  • HA方案支持多个NameNode
  • 引入纠删码技术(EC)

HA方案的优化主要是支持了多个NameNode,使得生产环境更加可靠一些。
纠删码技术诞生的背景是由于HDFS中3个副本的存储开销在某些场景下过大。例如一些冷数据的存储3份副本对于成本来说就显得有些浪费了。
因此,一个自然的改进是使用纠删码(EC)来代替副本,它提供了同等级别的容错能力,而且存储空间大大减少。在典型的纠删码(EC)设置中,存储开销不超过50% 。EC 文件的复制因子是无意义的。它总是1,不能通过 -setorp 命令更改。

有了纠删码技术的加入,故而HDFS3既提高了存储效率的同时又保持住了数据的持久性的特点。

你可能感兴趣的:(架构设计大数据hdfs)