在最初的实现中,YARN采用的资源抢占策略非常野蛮,在事先不告诉应用程序主管的情况下,强制杀死它的弟兄(任务),很显然,各个应用程序主管会非常的不满,这也有损YARN资源管理的形象,随着Hadoop生态系统的完善,当然不希望这种不和谐的场面出现,于是更友好地资源抢占策略提上了日程,本文介绍了新YARN新的抢占策略。

在YARN中,当ResourceManager探测到ApplicationMaster运行失败后,会尝试在另外一个节点上重新启动它,通常而言,ApplicationMaster重启后,会恢复之前的运行状态。而本文介绍的这个特性则是如何指定每个应用程序ApplicationMaster的重试次数。

近些年来Hadoop生态系统发展迅猛,它本身包含的软件越来越多,同时带动了周边系统的繁荣发展。尤其是在分布式计算这一领域,系统繁多纷杂,时不时冒出一个系统,号称自己比MapReduce或者Hive高效几十倍,几百倍。有一些无知的人,总是跟着瞎起哄,说Impala将取代Hive,Spark将取代Hadoop MapReduce等。本文则从问题域触发,解释说明Hadoop中每个系统独特的作用/魅力以及它们的不可替代性。

NodeManager是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务。本文介绍了NodeManager内部实现。

本文介绍YARN自带的一个非常简单的应用程序编程实例—distributedshell,他可以看做YARN编程中的“hello world”,它的主要功能是并行执行用户提供的shell命令或者shell脚本。本文主要介绍distributedshell的实现方法。

Application是NodeManager中用于维护一个Application生命周期的数据结构,它的实现是ApplicationImpl,该类维护了一个Application状态机,记录了Application可能存在的各个状态以及导致状态间转换的事件,本文介绍了该状态机。

Container是NodeManager中用于维护一个Container生命周期的数据结构,它的实现是ContainerImpl,该类维护了一个Container状态机,记录了Container可能存在的各个状态以及导致状态间转换的事件,本文介绍了该状态机。