1 介绍
随着企业数据化和Hadoop的应用越加广泛,hadoop1.x的框架设计越来越无法满足人们对需求,Apache一直在对Hadoop1.x进行修改,最后退出了新一代的Hadoop2.x,下面笔者将从HDFS和MapReduce两个方面对Hadoop1.x和Hadoop2.x直接的区别
2 HDFS之间的区别
Hadoop 1.X:
在Hadoop1.x中,HDFS的采用Masters/Slaves的方式设计集群,通过NameNode和DataNode的方式管理集群。在整个Hadoop1.x HDFS中分为Namespace和BlockStorageServer两个部分。其中Namespace完全分布在NameNode节点中,Namespace其中包括了所有文件的元数据、images镜像和edits文件等。而BlockStorageServer分布则是分布在NameNode节点和Datanode节点上的,在NamNodee节点中存放了所有的Block与DataNode节点之间的对应关系。而在Block的内容数据则是在DataNode节点中分布式存放着。
弊端:
(1)因为NameNode节点是整个集群的中心,一旦NameNode发生宕机,将会导致整个集群的瘫痪,直到NameNode被重启以后问题才被解决。
(2)NameNode节点的个数只有一个,单机的性能是有限的,并且NameNode中存放着有关DataNode节点的信息,因此在理论上无法实现横向无限性增加DataNode节点,这也就是为什么有NameNode最多支持4000个节点的由来。
Hadoop 2.X
Hadoop2.x实现联邦HDFS,即多个NameNode节点并存,并且每一个NameNode节点管理一个Namespace,我们先看下面这张图:
Block Pool:block池,一个NameNode管理的所有的block节点,一个NameNode节点和去的Pool为一个管理单元,来管理自己的Block。
在联邦HDFS中,每个Namespace都有自己的Block管理,但这些Block全部存放在整个DataNode集群中,如上图所示,Namespace之间是相互隔离的,即使一个NameNode节点宕机,也不会影响到其他NameSpace,同事也不会影响到其管理的Datanodes中的Block。
优势:
(1)可以做到自由的横向无限制扩充DataNode节点。
(2)可以实现多个NameNode并发执行任务,提高HDFS系统的吞吐量
(3)安全性得到很大的提示,单个NameNode节点的崩溃不会导致整个系统的瘫痪。
3 MapReduce之间的区别
Hadoop1.X:
Hadoop1.x运行MapReduce任务的流程为:
(1)Job Client提交任务给JobTracker(NameNode节点中),JobTracker向各个节点发出询问请求,查看每个DataNode节点中执行的Task(任务)的个数
(2)JobTrack手机DataNodes的信息,并未Job进行资源分配
(3)将MapReduce任务所需的资源、信息等全部复制到Datanodes节点中。
(4)DataNode节点接受任务后,将本地的Block读取,并形成相应的Map和Reduce任务,这些任务的管理全部由DataNodes节点中的TaskTracker进行监督。
从图中可知,JobTacker是整个Hadoop1.x MapReduce框架的中心,其承担的任务有:接受任务、计算资源、分配资源、与DataNode进行交流等功能。Hadoop1.x 框架在发布时收到很大的环境,但是随着需求越来越大,Hadoop1.x 的MapReduce(MapReduce v1)已经不能够胜任现在的需求,主要表现在以下几个问题:
(1)JobTracker是整个MapReduce v1的核心,存在单点故障
(2)JobTracker管理整个MapReduce作业的任务,造成资源消耗,当map/reduce task过多的时候,JobTracker将会耗费大量内存,同时也增加Job Tracker fail的风险。
(3)JobTracker对DataNode进行资源询问室,使用的Task的个数,为考虑内存和CPU的使用率等,如果将两个大内存的Map/reduce Task放在一个节点上执行,可能会出现OOM(内存溢出)。
(4)代码层中的类有些超过3000行,导致整个类的任务不够明确,并且进行修改是任务量也巨大,因此增加了维护、开发人员进行修改的难度。
Hadoop 2.X
为了应对越来越大的需求,已经MapReduce v1的弊端,Apache对MapReduce v2进行了重新设计,出现了MapReduce v2,也就是YARN框架。下面介绍一下YARN框架。
(1)ResourceManager:在MapReduce v1中,JobTracker的任务有两个:资源管理和任务调度。而在YARN框架中,将JobTracker的两个核心任务进行分离,其中的资源管理形成新的ResourceManager。ResourceManager负责管理每个NodeManager节点所提供的资源状态(内存、CPU、磁盘和带宽等传统信息)。在MapReduce任务的时候,RM会精确计算每个整个集群的资源情况,已分配给该任务合适的资源。
(2)Container:对一个节点的内存、CPU等资源的描述的整体描述。
(3)ApplicationMaster:每一个MapReduce任务都对应着一个AM,AM负责向ResourceManager索要执行任务所需要的资源容器,根据进程的状态、管理进行和处理进程失败的原因。
(4)NodeManager:是一个机器框架的代理,是任务执行的容器,其管理者节点的诸多信息:例如内存、CPU、硬盘、网络等资源。
YARN相对于MapReduce v1的优势:
(1)JobTracker所承担的庞大负担被分割,资源管理和任务调度分配在不同的节点,并且实现程序的分布化、最优化
(2)ResourceManager资源分配不再凭借slot的个数,而是根据节点的内存是分配任务,使得负载均衡更在完善
(3)ResourceManager节点上有一个ApplicationMasters进程,负责管理每个ApplicationMatser进程的状态,从而实现监督任务。
4 总结
Hadoop 2.X作为新一代的Hadoop对Hadoop 1.x进行了框架的重新设计,使得Hadoop框架更加具体化,并且框架的改变也解决了显示生活中的一些问题。随着Hadoop的不断普及,Hadoop 2.x也逐渐成熟,大家有兴趣的话可以去学习一下hadoop 2.x
参考博客:
http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
http://www.csdn.net/article/2013-12-18/2817842-bd-hadoopyarn
http://www.educity.cn/net/1620190.html