Hadoop为什么会有Yarn
Hadoop2.x较Hadoop1.x来说,变化非常大,主要主要体现在Hadoop2.x引入了“Yarn”这个核心部件。
hadoop1.x有两大部件,HDFS和MadpReduce,其中HDFS(Hadoop Distributed Files System)用于分布式存储文件,由一个NameNode和多个DateNode组成,便于集群中各机器从上面读取和写入文件(数据),MadpReduce由一个JobTracker和多个TaskTracker组成,两个核心任务,Map负责对数据块的分片,Reduce对Map进程出来的结果进行聚合,排序,写入到HDFS中。从上图中,对于hadoo1.x来说,HDFS和MapReduce是两个相互依赖的关系,而对于hadoop2.x,在HDFS和MapReduce之间增加了Yarn部件,这个暂且可以理解为是一个“管理平台”,MapReduce就变成了一个可插拔的“插件”,它不仅仅允许hadoo自身的部件使用,还允许其他的数据处理插件接入到hadoop的生态上,如spark。
为什么要引入yarn呢?
首先,简单了解hadoop1.x的MapReduce工作原理:
为了更好的理解,我们就需要跟hadoop1.x比较:
为何要使用yarn。
我们看到JobTracker的功能被分散到各个进程中包括ResourceManager和NodeManager:
比如监控功能,分给了NodeManager,和Application Master。
ResourceManager里面又分为了两个组件:调度器及应用程序管理器。
也就是说Yarn重构后,JobTracker的功能,被分散到了各个进程中。同时由于这些进程可以被单独部署所以这样就大大减轻了单点故障,及压力。
同时我们还看到Yarn使用了Container,而hadoop1.x中使用了slot。slot存在的缺点比如只能map或则reduce用。Container则不存在这个问题。