浅析Spark On Yarn架构及其优势
随着互联网行业的逐渐扩张,线上业务量大幅增加,对数据处理能力的要求也逐步提高。如何选择合适的数据处理框架以及任务调度框架,成为每个对数据处理有要求的公司需严谨思考的问题。本文从Spark这一数据处理引擎入手,浅析spark on yarn的优势及缺点,作为选择数据处理框架的参考。
一、 Spark/Yarn简述
Spark:Apache Spark是处理大规模数据的统一分析引擎,用于构建大型、低延迟的数据分析应用程序。与其他大数据处理引擎相比,spark引擎最大的优势是采用了in-memory的计算方式,引入了RDD(Resilient Distributed Dataset)的内存抽象结构,使其在保证容错性、可扩展性等特性的同时,能够保证性能的高效。RDD是Spark的核心概念,本质上可以理解为一个只读的分区记录集合,并且可以全部或部分缓存在内存中,在多次计算间重用。它能使得Spark在计算时不需要频繁从I/O读取数据,减少数据计算中调用I/O消耗的时间,从而保证性能的高效。
Yarn:Yarn是hadoop将JobTracker资源调度工作独立出来之后产生的新的资源管理框架,它将原有JobTracker一个组件完成的功能拆分为多个组件协同完成,增强了原有架构的可靠性以及可扩展性。拆分后的框架分为ResourceManager以及NodeManager两个主要组件,其中ResourceManager中还包括Scheduler及ApplicationMaster等。几个组件相互调度,共同协同完成一个应用程序执行的全过程。下文将结合spark作业提交的流程详细描述各组件负责的功能以及完整的资源调度流程。
二、 Spark On Yarn 架构及数据处理流程
本节将详细描述Spark On Yarn架构的作业调度方式及数据处理流程。首先我们知道,spark集群在开发时考虑到未来要对接一些更强大的资源管理系统,所以在架构设计时将资源管理抽象出来了一层,以保证后续可以构建插件式的资源管理模块。Spark抽象出来的资源管理框架如下图所示:
其中Master(CM)是Spark的主控节点,负责接收Worker自身资源的状态、Executor执行状态的改变等,并发送命令启动Executor或Driver。Worker是Spark的工作节点,负责接收命令启动Executor或Driver。Driver是应用程序的驱动程序,每个应用会被分解成许多小任务,Driver负责推动这些小任务的执行。Executor是Spark的工作进程,由Worker监管,负责具体任务的执行。而这一架构与Yarn的资源调度框架高度相似,只是Master、Worker等资源管理、调度的工作被Yarn中的组件取而代之。在很多同学学习spark on yarn架构时会对两者的概念进行混淆,这里简述一下spark资源管理框架中的组件与yarn框架组件的对应关系:
- Spark资源管理架构中的Master与Yarn中的ResourceManager对应:ResourceManager是Yarn架构中对资源调度的总控组件,负责资源管理。整个系统中有且只有一个RM,主要包含两个主要组件:Scheduler以及ApplicationMaster。Scheduler会根据所需要的资源以及当前集群的资源状况进行分配,它指负责向应用程序分配资源,不做监控以及应用程序的状态跟踪。ApplicationMaster负责管理用户提交的应用程序,对应用程序的执行状态的监控及跟踪工作是ApplicationMaster执行的。
- Worker和NodeManager对应:NodeManager是ResourceManager 在每台机器上的代理,负责容器管理,并监控他们的资源使用情况。
- Driver和ApplicationMaster对应:ApplicationMaster是应用程序管理组件,会为应用程序向ResourceManager申请资源,并分发程序到容器上执行。
- Executor和Container对应。
于是相对应的,Spark On Yarn的资源调度流程就可以抽象成以下几个步骤:
- 用户提交一个任务给Yarn ResourceManager,ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster,此时ApplicationMaster上运行的就是Spark Driver。
- Spark Driver启动以后,会对Spark作业进行拆分,随后ApplicationMaster向ResourceManager申请要运行程序的容器并启动NodeManager,将拆分后的作业分发到Container(Executor)上运行。
- 各个任务会向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动或者在任务结束后释放资源。同时NodeManager会向ResourceManager汇报容器的资源使用情况,为ResourceManager的资源调度做支持。
三、 Spark On Yarn优势
首先Spark的资源调度框架与Yarn类似,Spark运行在Yarn上不需要做过度适配和修改,更易安装部署。Yarn框架可以自由选择Executor数量,这样保证即使task被分解成多个task,yarn架构也可以实现完整的调度和监控。配合spark的RDD概念,保证高性能的作业执行流程。同时Yarn框架也支持运行多个同类的服务和应用程序,框架本身可以利用cgroups实现资源隔离,这样也保证用户想要将其他应用程序与spark结合使用时不需要担心资源隔离的问题,实现了程序的易扩展性。
四、 总结
无论是Spark独立集群还是Spark on yarn集群资源调度框架,都是大数据处理行业能关注到的一角,日后小编会为大家总结更多数据处理相关的知识和时下热门的程序以及框架,希望能为大家的理解及选择作为一个参考。
- 点赞
- 收藏
- 关注作者
评论(0)