您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Yarn 介绍

Yarn,它是 Facebook 最近开源的,优点是更快、更安全、更可靠。它的主要特性有离线模式、确定性、网络、多、网络恢复能力、扁平模式以及 Emoji。

Yarn 会缓存下载的每包,所以以后不需要重新下载。它还可以并行允许,最大化资源利用,所以安装速度更快。

可靠:使用详细但简洁、格式、确定性算法来安装,Yarn 可以确保在系统中与另系统中运行的方式完全相同。

安全:Yarn 会在运行前通过校验来验证包安装的完整性。

Yarn 对你的来说是包管理器, 你可以通过它使用全世界开发者的,或者自己的。 Yarn 做这些快捷、安全、可靠,所以你不用担心什么。

通过Yarn你可以使用者针对不同问题的案,使自己的开发过程更简单。 使用过程中遇到问题,你可以将其上报或者贡献案。一旦问题被修复,Yarn会更新保持同步。

通过包(package)(或者称为模块(module))的方式来共享。 包里包含所有需要共享的,以及描述包信息的,称为package.json。

    Yarn在整体上看还是采用了和Hadoop1.x一样的Master/Slave结构(横向扩展混杂Slave/Slave结构),在整个Yarn资源管理系统当中,ResourceManager作为Master,各个节点的NodeManager作为Slave。各个节点上NodeManager的资源由ResourceManager进行管理和调度。当应用程序提交后,会有单独的Application来对该应用程序进行跟踪和管理,同时该Application还会为该应用程序想Resource申请资源,并要求NodeManager启动该应用程序占用一定资源的任务。

下图主要以MR和MPI这两种应用来描述Yarn运行的基本架构:

    ResourceManager是Yarn的核心组件,主要由任务调度器(YarnScheduler)和应用程序管理器(Applications Manager)组成。其主要是负责系统资源的管理和分配。

任务调度器(YarnScheduler)

    任务调度器根据系统资源容量以及对队列的限制条件,按照一定的策略将资源分配给正在运行的应用程序。相比于Hadoop1.x而言,Yarn为任务调度器做了减负,任务调度器不再负责跟踪和监控应用的执行状态,也不负责重新启动因为应用执行失败或者硬件故障而运行失败的任务,这些任务都有该应用程序对应的ApplicationMaster来负责了,这使得YarnScheduler的更加纯粹。另外,任务调度器和Hadoop1.x一样也是热插拔模块,你可以自己的任务调度器,同样你也可以直接使用其他任务调度器,如,Fair Scheduler或者Capacity Scheduler。

应用程序管理器(Applications Manager)

    应用程序管理器,负责管理整个系统中所有应用程序,应用程序提交、向任务调度器申请资源启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它。

其他

    ResourceManager中还包含了其他组件,如ResourceTrackerService用来直接处理心跳,NMLivelinessMonitor用来监控NodeManager,NodesListManager 提供NodeManager的黑白名单等等。

    每当提交了应用程序就会为这个应用程序产生对应的ApplicationMaster,并且这个这个单独进程是在其中子节点上运行的。它的主要:为应用向ResourceManager申请资源、在job对Task实行调度、与NodeManager通信以启动或者停止任务、监控所有任务的运行情况,并且在任务失败的情下,重新为任务申请资源并且重启任务、负责推测任务的执行、当ApplicationMaster向ResourceManager后,ApplicationMaster可以提供客户端作业进度信息等。

    NM是每个子节点上的资源和任务管理器,一方面,它会定向通过心跳信息向RM汇报本节点上的资源使用情况和各个Container的运行情况;另一方面,它会接收并且处理来自AM的Container启动和停止的各种请求。它的能有点像Hadoop1.x中的TaskTracker。

    Container是Yarn中对系统资源的抽象,同时它也是系统资源分配的基本单位,它封装节点上多维度资源,其中、内存、磁盘、网络等。Yarn会为每个任务分配Container,并且该任务只能够使用该Container中所描述的资源。值得关注的的是,Yarn中的Container和MRv1中的Slot是完全不同的,Container是动态的资源划分单位,它是根据实际提交的应用程序所需求的资源的,换句话说,Container其里边所描述的、内存等资源是根据实际应用程序需求而变的。而Slot是静态的资源抽象单位,每同类型的Slot所描述的资源信息都是一样的。


联系我
置顶