Hadoop、MapReduce、YARN和Spark的区别与联系

531 阅读5分钟

<1>Hadoop 1.0

 第一代Hadoop,由分布式文件存储系统HDFS和分布式计算框架MapReduce组成,
 其中,HDFS由一个NameNode和多个DataNode组成,
 MapReduce由一个JobTracker和多个TaskTracker组成,

<2>Hadoop 2.0

 第二代Hadoop,解决了Hadoop 1.0中HDFS和MapReduce存在的各种问题。
 HDFS存在的问题是:
     单NameNode制约HDFS的扩展性问题,提出了HDFS Federation,
     它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展。
 MapReduce存在的问题是:
     MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARN。
     YARN把jobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManager和ApplicationMaster去实现。
     其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序。
 注意:YARN是Hadoop的一个子项目,与MapReduce并列。

<3>MapReduce 1.0

第一代MapReduce分布式计算框架由两部分组成:编程模型和运行时环境。
它的基本编程模型是将问题抽象成MapReduce两个阶段,其中Map阶段将输入数据解析成key/value,
而Reduce阶段则将key相同的value进行规约处理,并将最终结果写到HDFS上。

它的运行时环境由两类服务组成:JobTrackerTaskTracker,
其中,JobTracker负责资源管理和所有作业的控制,
而TaskTracker就是接收来自JobTracker的任务分配然后执行。

<4>MapReduce 2.0

MapReduce 2.0和MapReduce 1.0具有相同的编程模型,唯一不同的是运行时环境。
MapReduce 2.0是在MapReduce 1.0基础上经过加工之后,运行于资源管理框架YARN之上的MRv1,
它不再由JobTracker和TaskTracker组成,而是变为一个作业控制进程ApplicationMaster,
且ApplicationMaster仅负责一个作业的管理,至于资源的管理,则由YARN完成。
由此可见mapreduce负责计算,yarn负责资源控制cuiyaonan2000@163.com

简而言之,MRv1是一个独立的离线计算框架,而MRv2则是运行于YARN之上的MRv1。

<5>Hadoop-MapReduce

是离线计算框架
适用于批处理,不具备低延迟性。
Hadoop-MapReduce是google分布式计算框架MapReduce与分布式存储系统GFS的开源实现,
由分布式计算框架MapReduce和分布式存储系统HDFS(Hadoop Distributed File System)组成,
具有高容错性,高扩展性和编程接口简单等特点,现已被大部分互联网公司采用。

<6>Hadoop-yarn

Hadoop 2.0的一个分支,实际上是一个集群资源管理系统。
YARN是Hadoop的一个子项目,与MapReduce并列。
它实际上是一个资源统一管理系统,
可以在上面运行各种计算框架,包括MapReduce、Spark、Storm、flink等。

总结

Hadoop 1.0:由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成。
Hadoop 2.0:包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比于Hadoop 1.0,Hadoop 2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。

  从开源角度看,YARN的提出,从一定程度上弱化了多计算框架之间的优劣之争。 YARN是在Hadoop MapReduce基础上演化而来的。

在MapReduce时代,很多人批评MapReduce不适合迭代计算和流计算,于是出现了Spark(针对迭代计算)和Storm(针对流式计算)等分布式计算框架,而这些系统的开发者则在自己的网站上或者论文里与MapReduce对比,鼓吹自己的系统多么先进高效,

而出现了YARN之后,则形势变得明朗:MapReduce只是运行在YARN之上的一类应用程序抽象,
Spark和Storm本质上也是,他们只是针对不同类型的应用开发的,没有优劣之别,各有所长,合并共处,
而且,今后所有分布式计算框架的开发,不出意外的话,也应部署在YARN这资源管理系统之上。
这样,一个以YARN为底层资源管理平台,多种分布式计算框架运行于其上的生态系统诞生了。
故此mapreduce,spark,storm,flink都是运行在yarn上的一种应用。

  spark是一个非常流行的内存分布式计算框架,在MapReduce因效率低下而被广为诟病的今天,spark的出现不禁让大家眼前一亮。

从架构和应用角度上看,spark是一个仅包含计算逻辑的开发库,而不包含任何资源管理和调度相关的实现,
这使得spark可以灵活运行在目前比较主流的资源管理系统上,
典型的代表是mesos和yarn,我们称之为“spark on mesos”和“spark on yarn”。
将spark运行在资源管理系统上将带来非常多的收益,包括:与其他计算框架共享集群资源;资源按需分配,进而提高集群资源利用率等。

运行在yarn资源管理系统上的框架有哪些

运行在YARN上的框架,包括MapReduce-On-YARN, Spark-On-YARN, Storm-On-YARN和Tez-On-YARN。

(1)MapReduce-On-YARN:YARN上的离线计算;
(2)Spark-On-YARN:YARN上的内存计算;
(3)Storm-On-YARN:YARN上的实时/流式计算;
(4)Tez-On-YARN:YARN上的DAG计算