博格论题
第一代Hadoop由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中HDFS由一个NameNode和若干个DataNode组成,MapReduce由一个JobTracker和若干个TaskTracker组成,对应的Hadoop版本为Hadoop 1.x和0.21。x,0.22.x
(2) Hadoop 2.0
第二代Hadoop是为了克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的。针对Hadoop 1.0中单个NameNode限制HDFS扩展的问题,提出了HDFS联邦,允许多个NameNode管理不同的目录,实现访问隔离和水平扩展。针对Hadoop 1.0中MapReduce在可扩展性和多帧支持方面的不足,提出了一种全新的资源管理框架YARN(另一种资源协商器),将JobTracker中资源管理和作业控制的功能分离。分别由组件ResourceManager和ApplicationMaster实现,其中ResourceManager负责所有应用的资源分配,ApplicationMaster只负责管理一个应用。对应的Hadoop版本是Hadoop 0.23.x和2.x。
(3) MapReduce 1.0或MRV 1 (MapReduce版本1)。
第一代MapReduce计算框架由两部分组成:编程模型和运行时环境。它的基本编程模型是将问题抽象为两个阶段:Map和Reduce。在map阶段,将输入数据解析成key/value,然后迭代调用Map()函数后,以key/value的形式输出到本地目录。在Reduce阶段,具有相同关键字的值被调整,最终结果被写入HDFS。其运行时环境由JobTracker和TaskTracker两种服务组成,其中JobTracker负责所有作业的资源管理和控制,TaskTracker负责接收JobTracker的命令并执行。
(4)MapReduce 2.0或MRv2(MapReduce版本2)或NextGen MapReduc。
MapReduce 2.0或MRv2与MRv1具有相同的编程模型,但唯一的区别是运行时环境。MRv2是MRv1,是在MRv1的基础上处理的,运行在资源管理框架YARN上。它不再由JobTracker和TaskTracker组成,而是变成了一个作业控制流程ApplicationMaster,ApplicationMaster只负责一个作业的管理。至于资源的管理,纱来完成。
简而言之,MRv1是一个独立的离线计算框架,而MRv2是运行在YARN上的MRv1。
(5)Hadoop-MapReduce(一个离线计算框架)
Hadoop是google分布式计算框架MapReduce和分布式存储系统GFS的开源实现。它由分布式计算框架MapReduce和分布式存储系统HDFS (Hadoop分布式文件系统)组成。具有高容错性、高可扩展性、编程接口简单等特点,被大多数互联网公司采用。
(6)Hadoop-Yarn(Hadoop 2.0的一个分支,实际上是一个资源管理系统)
YARN是Hadoop(与MapReduce并列)的子项目,实际上是一个统一的资源管理系统,可以运行各种计算框架(包括MapReduce、Spark、Storm、MPI等。)在上面。
现在的Hadoop版本比较混乱,让很多用户无所适从。其实Hadoop目前只有两个版本:Hadoop 1.0和Hadoop 2.0。其中,Hadoop 1.0由分布式文件系统HDFS和离线计算框架MapReduce组成,而Hadoop 2.0包括支持NameNode横向扩展的HDFS、资源管理系统YARN和运行在YARN上的离线计算框架MapReduce。与Hadoop 1.0相比,Hadoop 2.0功能更强大,可扩展性和性能更好,支持多种计算框架。
诸如Borg/YARN/Mesos/Torca/Corona等系统可以为公司构建一个内部生态系统,所有的应用和服务都可以以一种“和平友好”的方式在这个生态系统上运行。有了这种系统,你就不用担心用哪个版本的Hadoop了,Hadoop 0.20.2还是Hadoop 1.0,也不用担心选择哪个计算模型,各种软件版本和计算模型都可以在一台“超级计算机”上一起运行。
从开源的角度来看,YARN的提议在一定程度上削弱了关于多计算框架优劣的争论。YARN是在Hadoop MapReduce的基础上进化而来的。在MapReduce时代,很多人批评MapReduce不适合迭代计算和流失计算,于是出现了Spark、Storm等计算框架,这些系统的开发者在自己的网站或论文上与MapReduce进行对比,鼓吹自己的系统如何先进高效。在YARN出现之后,情况就明朗了:MapReduce只是一种运行在YARN上的应用抽象,Spark和Storm本质上是一样的。它们只是针对不同类型的应用而开发的,各有优缺点。此外,如果不出意外,所有未来的计算框架都应该在YARN上开发。就这样,一个以YARN为底层资源管理平台,各种计算框架运行其上的生态系统诞生了。
目前,spark是一个非常流行的内存计算(或迭代计算,DAG计算)框架。在MapReduce被广泛诟病效率低下的今天,spark的出现不禁让大家眼前一亮。
从架构和应用的角度来看,spark是一个只包含计算逻辑的开发库(虽然它提供了独立运行的主/从服务,但考虑到稳定性和与其他类型作业的继承性,通常不采用),但它不包含任何与资源管理和调度相关的实现,这使得spark可以在当前主流的资源管理系统上灵活运行,典型代表是mesos和yarn,我们称之为“mesos上的spark”。在资源管理系统上运行spark会带来很多好处,包括:与其他计算框架共享集群资源;资源按需分配,提高集群资源利用率。
纱线上的框架
在纱线上运行的框架,包括MapReduce-on-yarn、Spark-on-yarn、Storm-on-yarn和Tez-On-YARN。
(1) MapReduce-on-yarn:纱线上的离线计算;
(2)纱线上的火花:纱线上的记忆计算;
(3)纱上风暴:纱上实时/流计算;
(4)纱线上的Tez:纱线上的DAG计算。