第12章 下一代MapReduce框架

本书前面的章节主要介绍了第一代MapReduce框架(MapReduce Version 1.0,MRv 1)。随着时间的变迁,MRv 1已经变得日趋完善和稳定,且已被越来越多的公司采用。然而,随着数据量的高速增长和新型应用的出现,MRv 1在扩展性、可靠性、资源利用率和多框架支持等方面暴露出了明显不足,由此诞生了下一代MapReduce框架(MapReduce Version 2.0,MRv 2)。

本章将从基本设计思想、实现细节和工作流程等方面对常见的MRv 2框架的开源实现进行介绍。

12.1 第一代MapReduce框架的局限性

MRv 1存在各种问题,主要可概括为以下几个方面。

❑扩展性差:在MRv 1中,JobTracker同时具备了资源管理和作业控制两个功能,这成为系统的一个最大瓶颈,严重制约了Hadoop集群扩展性。

❑可靠性差:MRv 1采用了master/slave结构,其中,master存在单点故障问题,一旦它出现故障,将导致整个集群不可用。

❑资源利用率低:MRv 1采用了基于槽位的资源分配模型。槽位是一种粗粒度的资源划分单位,通常一个任务不会用完槽位对应的资源,且其他任务也无法使用这些空闲资源。此外,Hadoop将槽位分为Map slot和Reduce slot两种,且不允许它们之间共享,这常常会导致一种槽位资源紧张而另外一种闲置的情况出现(比如一个作业刚刚提交时,只会运行Map Task,此时Reduce slot闲置)。

❑无法支持多种计算框架:随着互联网的高速发展,MapReduce这种基于磁盘的离线计算框架已经不能满足应用要求,从而出现了一些新的计算框架,包括内存计算框架、流式计算框架和迭代式计算框架等,而MRv 1不能支持多种计算框架并存。

为了克服以上几个缺点,Apache和Facebook均开始尝试对Hadoop进行升级改造,进而诞生了更加先进的下一代MapReduce计算框架。