前言
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 两者元数据统一。
3.2 内存受限
高可用计划让单点故障问题得以解决。也让咱们晓得了 NameNode 的重要性,咱们之所以能这么快的通过 NameNode 检索到存储在 DataNod 的数据,是因为 NameNode 将元数据都读取到内存中,检索效率大大超于磁盘。
那么随着数据的与日俱增,元数据的越来越宏大,NameNode 的内存是否够存在受限。答案是肯定存在的,NameNode 自身也是一台服务器,拆卸的内存必定是受限的。那么当内存受限的时候,增加这台的内存也是能够长期解决当务之急的。但却治标不治本。咱们自身集群由这么多台服务器组成,一台节点的内存不够用,能够利用其余的服务器内存来实现这数据的检索。
所以,这里 HDFS 就使用了联邦机制(Federation)。
3.2.1 联邦机制(Federation)
联邦机制的原理就是将 NameNode 划分为不同的命名空间并进行编号(这里能够想像成计算机中的 C,D,E 盘等)。不同的命名空间之间互不烦扰。在 DataNode 中创立目录,此目录对应命名空间的编号。由此,编号雷同的数据由对应的命名空间进行治理。当然为了防止单点故障问题,仍旧采纳高可用计划。
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 既进步了存储效率的同时又放弃住了数据的持久性的特点。