前言
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既进步了存储效率的同时又放弃住了数据的持久性的特点。