大数据开发 | SPARK ON YARN运行模式

原标题:大数据开发 | SPARK ON YARN运行模式

面试过程中经常被问到spark on yarn的运行模式及区别,接下来我们从多方面展开阐述。

一、YARN介绍

Yarn 的全称是 Yet Anther Resource Negotiator(另一种资源协商者)。它作为 Hadoop 的一个组件,官方对它的定义是一个工作调度和集群资源管理的框架。可以基于这种资源管理机制运行多种计算框架,比如mapreduce和spark、flink。注意任何计算框架与YARN的结合,都必须遵循YARN的运作流程,如下图:

ResourceManager和NodeManagers是整个计算框架的核心部分。ResourceManager负责资源的分配,将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container。

Container封装了内存,磁盘和网络,每个任务都会被分配给Container,该任务使用Container中的资源执行,而NodeManager则是一个计算节点的管理者,负责启动Application所需的Container,并且对内部资源进行监控,将内存、磁盘、CPU等资源的使用情况汇报给ResourceManager。

二、spark角色描述

Application: Appliction是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码。

Driver: Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver。

Executor: 某个Application运行在worker节点上的一个进程, 该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor, 在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutorBackend。一个CoarseGrainedExecutorBackend有且仅有一个Executor对象, 负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task,每一个CoarseGrainedExecutorBackend能并行运行Task的数量取决于分配给它的cpu个数。

ClusterManager:指的是在集群上获取资源的外部服务。目前有三种类型:

Standalon:spark原生的资源管理,由Master负责资源的分配

Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架

Hadoop Yarn: 主要是指Yarn中的ResourceManager

Worker: 集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NodeManager节点。

Task: 被送到某个Executor上的工作单元,与hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责。

Job: 包含多个Task组成的并行计算,往往由Spark Action执行算子触发生成,一个Application中往往会产生多个Job。

Stage: 每个Job会被拆分成多组Task,作为一个TaskSet,其名称为Stage。Stage的划分和调度由DAGScheduler来负责的。Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方。

DAGScheduler: 根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TaskScheduler。其划分Stage的依据是RDD之间的依赖的关系找出开销最小的调度方法。

TaskScheduler : 将TaskSet提交给worker运行,每个Executor运行什么Task就是在此处分配的。TaskScheduler维护所有TaskSet,当Executor向Driver发出心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行标签,和失败重试的Task。

三、SPARK ON YARN运行模式

SPARK ON YARN运行模式根据Driver在集群中的位置可以分为YARN-Client模式和YARN-Cluster模式。

1.两模式区别:

(YARN-Client简写成client和 YARN-Cluster简写成cluster)

Driver的运行位置:

client:Driver运行在Client端(即提交作业的机器)。

cluster:Driver运行在ApplicationMaster中。

客户端是否能退出:

client:因为client会和请求到的Container进行通信来完成作业的调制和执行,所以不能退出。

cluster:clinet只要提交完作业后就可以关掉,因为作业已经在yarn运行了。

ApplicationMaster的职责:

clinet:到Yarn Resource Manager去申请资源。

cluster:除了要申请资源,还要处理作业调度。

运行的输出日志的位置:

clinet:日志会输出到控制台,便于测试

cluster:因为日志在Driver上,所以需要通过命令

$ yarn logs -applicationId <app ID>

(前提是要配置属性 yarn.log-aggregation-enable)或者在Spark Web UI上来查看日志

2.YARN-Client运行模式如下图所示:

在SparkContext启动过程中,会初始化DAGScheduler调度器、YarnScheduler和YarnClientSchedulerBackend,和启动DriverEndpoint和Client,这些都是在客户端Client过程中进行的。

YARN-Client模式,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互, 因为Driver在客户端本地运行, 使得Spark Application 和 客户端进行交互, 可以通过WebUI访问Driver的状态。

使用spark-submit 脚本提交应用程序时可以通过参数deploy-mode 指定client 设置为Yarn-Client模式:

./bin/spark-submit –class org.apache.spark.examples.SparkPi \

–master yarn \

–deploy-mode client \

–driver-memory 4g \

–executor-memory 2g \

–executor-cores 1 \

examples/jars/spark-examples*.jar

3.YARN-Cluster运行模式如下图所示:

在YARN-Cluster运行模式中,当用户向YARN提交应用程序后,YARN将分为两个阶段运行在该应用程序,第一个阶段是把Spark的Driver作为一个Application Master在YARN集群中先启动,第二个阶段是由Application Master创建应用程序,然后它会向Resource Manager申请资源,并启动Executor运行任务及监控运行过程。

在YARN-Cluster运行模式下,客户端只负责提交应用程序,这个过程包括启动Application Master命令、及提交给Application Mater的程序和需要在Executor中运行的程序等。而关于SparkContext的初始化则是由ResourceManager在收到Client的请求后,在集群中选择一个NodeManager,为该应用程序分配Container,启动Application Master。之后Application Master对SparkContext进行初始化,这是YARN两种运行模式下最直观的区别。

使用spark-submit 脚本提交应用程序时可以通过参数deploy-mode 指定cluster 设置为Yarn-cluster模式:

./bin/spark-submit –class org.apache.spark.examples.SparkPi \

–master yarn \

–deploy-mode cluster \

–driver-memory 1g \

–executor-memory 1g \

–executor-cores 1 \

examples/jars/spark-examples*.jar

四、总结

SPARK ON YARN模式可以分为YARN-Client和YARN-Cluster两种模式,这两种模式的主要区别在于Driver程序运行的节点不同。YARN-Client模式下,Driver程序直接运行在客户端,当使用者希望进行交互、调试、立即看到APP的输出结果的情况下,可以使用这种模式。YARN-Cluster模式下,Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)上,YARN-Cluster模式更适合用于生产环境,是使用最广泛地模式。返回搜狐,查看更多

责任编辑:

    THE END
    喜欢就支持一下吧
    点赞7 分享
    评论 抢沙发
    头像
    欢迎您留下宝贵的见解!
    提交
    头像

    昵称

    取消
    昵称表情代码图片

      暂无评论内容