最近開了一個讀者回饋表單郵箱,無論是對文章的感想或是對部落格的感想,有什麼想回饋的都可以發郵箱跟我說:i_kkkp@163.com

Hadoop 2.0体系架构之分布式文件系统Yarn

Hadoop Yarn 是什么

在古老的 Hadoop1.0 中,MapReduce 的 JobTracker 负责了太多的工作,包括资源调度,管理众多的 TaskTracker 等工作。这自然是不合理的,于是 Hadoop 在 1.0 到 2.0 的升级过程中,便将 JobTracker 的资源调度工作独立了出来,而这一改动,直接让 Hadoop 成为大数据中最稳固的那一块基石。,而这个独立出来的资源管理框架,就是 Yarn 。

在详细介绍 Yarn 之前,我们先简单聊聊 Yarn ,Yarn 的全称是 Yet Another Resource Negotiator ,意思是“另一种资源调度器”,这种命名和“有间客栈”这种可谓是异曲同工之妙。这里多说一句,以前 Java 有一个项目编译工具,叫做 Ant,他的命名也是类似的,叫做 “Another Neat Tool”的缩写,翻译过来是“另一种整理工具”。

既然都叫做资源调度器了,那么自然,它的功能也是负责资源管理和调度的,接下来,我们就深入到 Yarn 这个东西内部一探究竟吧。

Yarn 架构

hadoop-Yarn

① Client:客户端,负责向集群提交作业。

② ResourceManager:集群主进程,仲裁中心,负责集群资源管理和任务调度。

③ Scheduler:资源仲裁模块。

④ ApplicationManager:选定,启动和监管ApplicationMaster。

⑤ NodeManager:集群从进程,管理监视Containers,执行具体任务。

⑥ Container:本机资源集合体,如某Container为4个CPU,8GB内存。

⑦ ApplicationMaster:任务执行和监管中心。

三个主要组件

再看最上面的图,我们能直观发现的两个主要的组件是 ResourceManagerNodeManager ,但其实还有一个 ApplicationMaster 在图中没有直观显示。我们分别来看这三个组件。

ResourceManager

我们先来说说上图中最中央的那个 ResourceManager(RM)。从名字上我们就能知道这个组件是负责资源管理的,整个系统有且只有一个 RM ,来负责资源的调度。

它也包含了两个主要的组件:定时调用器(Scheduler)以及应用管理器(ApplicationManager)

定时调度器(Scheduler):从本质上来说,定时调度器就是一种策略,或者说一种算法。当 Client 提交一个任务的时候,它会根据所需要的资源以及当前集群的资源状况进行分配。注意,它只负责向应用程序分配资源,并不做监控以及应用程序的状态跟踪。

应用管理器(ApplicationManager):同样,听名字就能大概知道它是干嘛的。应用管理器就是负责管理 Client 用户提交的应用。上面不是说到定时调度器(Scheduler)不对用户提交的程序监控嘛,其实啊,监控应用的工作正是由应用管理器(ApplicationManager)完成的。

ApplicationMaster

每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个 ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。

这里可能有些难以理解,为什么是把运行程序发送到容器上去运行?如果以传统的思路来看,是程序运行着不动,然后数据进进出出不停流转。但当数据量大的时候就没法这么玩了,因为海量数据移动成本太大,时间太长。但是中国有一句老话山不过来,我就过去。大数据分布式计算就是这种思想,既然大数据难以移动,那我就把容易移动的应用程序发布到各个节点进行计算呗,这就是大数据分布式计算的思路。

NodeManager

NodeManager 是 ResourceManager 在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler 提供这些资源使用报告。

Yarn的主要思想是将MRv1版JobTracker的两大功能——资源管理和任务调度,拆分成两个独立的进程:

hadoop-Yarn

  • Yarn依旧是master/slave结构

  • 主进程ResourceManager是整个集群资源仲裁中心

  • 从进程NodeManager管理本机资源

  • ResourceManager和从属节点的进程NodeManager组成了Hadoop 2.0的分布式数据计算框架

提交一个 Application 到 Yarn 的流程

hadoop-Yarn

这张图简单地标明了提交一个程序所经历的流程,接下来我们来具体说说每一步的过程。

  • Client 向 Yarn 提交 Application,这里我们假设是一个 MapReduce 作业。

  • ResourceManager 向 NodeManager 通信,为该 Application 分配第一个容器。并在这个容器中运行这个应用程序对应的 ApplicationMaster。

  • ApplicationMaster 启动以后,对 作业(也就是 Application) 进行拆分,拆分 task 出来,这些 task 可以运行在一个或多个容器中。然后向
    ResourceManager 申请要运行程序的容器,并定时向 ResourceManager 发送心跳。

  • 申请到容器后,ApplicationMaster 会去和容器对应的 NodeManager 通信,而后将作业分发到对应的 NodeManager 中的容器去运行,这里会将拆分后的 MapReduce 进行分发,对应容器中运行的可能是 Map 任务,也可能是 Reduce 任务。

  • 容器中运行的任务会向 ApplicationMaster 发送心跳,汇报自身情况。当程序运行完成后, ApplicationMaster 再向 ResourceManager 注销并释放容器资源。
    以上就是一个作业的大体运行流程。

hadoop-Yarn

Yarn 架构典型拓扑

除了ResourceManagerNodeManager两个实体外,Yarn还包括WebAppProxyServerJobHistoryServer两个实体。

hadoop-Yarn

JobHistoryServer:管理已完成的Yarn任务

  • 历史任务的日志和执行时的各种统计信息统一由JobTracker管理
  • Yarn将管理历史任务的功能抽象成一独立实体JobHistoryServer

WebAppProxyServer:任务执行时的Web页面代理

  • 通过使用代理,不仅进一步降低了ResourceManager的压力,还能降低Yarn受到的Web攻击
  • 负责监管具体MapReduce任务执行全过程,将从Container那里收集过的任务执行信息汇总并显示到一个Web界面上

Yarn 调度策略

容量调度算法
CapacityScheduler是一种多用户多任务调度策略,它以队列为单位划分任务,以Container为单位分配资源

hadoop-Yarn

公平调度策略
FairScheduler是一种允许多个Yarn任务公平使用集群资源的可插拔式调度策略

hadoop-Yarn

Webpack HMR 原理解析 Hadoop 2.0体系架构之分布式文件系统HDFS

評論