原标题:大数据开发 | 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模式更适合用于生产环境,是使用最广泛地模式。返回搜狐,查看更多
责任编辑:
暂无评论内容