关于Hadoop1.0与2.0

关于Hadoop的局限性与不足:

1.抽象层次低:对于简单的功能,编写大量的代码。
2.表达能力有限,MR把复杂分布式编程工作高度抽象到两个函数上,即MAP与REDUCE 上,实际生产环境上中有些不能只用简单的两个函数完成。
3.要管理作业间复杂的依赖关系。实际应用通常需要大量的job协作完成,job之间往往存在复杂的依赖关系。
4.迭代效率低。对于需要迭代的任务。需要反复读写HDFS文件中的数据,大大降低了迭代的效率
5.资源浪费:Reduce任务需要等到所有的MaP任务完成之后才开始。
6.实时性差。适用于离线批处理

Hadoop1.0到2.0的差别:
问题:
单一名称节点,存在单点失效问题
解决:
设计了HDFS HA,提供了名称节点热备份机制

问题:
单一命名空间,无法实现资源隔离
解决:
设计了HDFS Federation,管理多个命令空间

问题:
资源管理效率低
解决:
设计了新的资源管理框架yarn

对于Hadoop2.0的改进:
主要是HDFS HA 和联邦机制

1.关于HDFS HA:
在分布式文件系统HDFS中,NameNode是系统的核心节点,存储了各类元数据信息,并负责管理文件系统的命名空间和客户端对文件的访问,但是,在Hadoop1.0中,只有一个NameNode,虽然有个SNN,但是它并不是一个热备份,SNN的主要功能是周期性的从NN中拉取FsImage和EditLog进行合并并发送给NN,替换到原来的FsImage,以防止EditLog文件过大。导致NN失败恢复时消耗过多的时间。合并完成后的FsImage会在SNN中保存一份,当NN失效时,可以利用SNN中的FsImage进行恢复。

由于SNN无法提供“热备份”功能, 在NN发生故障时,无法立即进行切换SNN,需要停机恢复。在HDFS2.0中,采用了HA架构。在此架构中,采用两个NN,一个NN为active状态,另一个为standby状态。为active状态的NN,对外处理所有客户端的请求,处于standby状态的NN为热备份节点, 保存了足够多的元数据,当active状态的NN出现故障的时候,可以立即切换到active状态对外提供服务。
关于Hadoop1.0与2.0_第1张图片

由于StandbyNameNode是active状态NN的热备份,因此active的NN的状态信息实时同步到StandbyNN。在上图中,实现信息同步借助JournaNode来实现。 activeNN将更新的数据写入到JNN中,SNN会一直进行监听,一旦有新数据的写入,就会立即从JNN中去获取这些数据更新到自己的内存中,以保存自己与activeNN一致。
主节点NN上保存着数据块保存在DN的实际存储位置,DN也会定期发送心跳给NN,以确保自己存储数据块的状态得以通知NN还可以实时更新映射地址信息。SNN要实现热备份,就需要获取到这些DN的信息,所以DN也会给SNN发送心跳信息,来确保可以得到与ANN相同的信息数据。
为了防止出现两个主节点的现象,保证时刻有也只有一个active的NN,就需要ZK进行协调管理。

2.关于联邦机制:
在上述中,HA解决了HDFS的单点故障问题
但是仍存在问题:
(1)系统拓展性方面:元数据存储在NN的内存中,受内存上限的影响
(2) 整体性能方面:受单个NN的影响
(3)隔离性方面:一个程序可能影响其他程序的运行。如一个程序占用的资源过多会导致其他程序无法顺利运行。因为HDFS本质还是单名称节点。

在联邦机制中解决了以上三个问题:
在HDFS联邦中,设计了多个相互独立的NN,使得HDFS的命名服务能够水平扩展,这些NN分别进行各自的 命名空间和块的管理,不需要彼此协调。每个DN要向集群中所有的DN进行注册,并周期性的发送心跳信息和块信息,报告自己的状态。
HDFS的联邦拥有多个的独立的命名空间,其中每一个命名空间管理属于自己的一组块。这些属于同一个命名空间的块组成了一个块池。每个DN会为每个块池提供块的存储。块池中的各个块,实际上存储在不同的DN中。
关于Hadoop1.0与2.0_第2张图片
(自我感觉:联邦机制就是允许多个NameNode同时运行,使用同时使用数据节点,以解决内存上限的问题,希望有人指出讲解下)

你可能感兴趣的:(大数据)