理解Spark运行模式(二)(Yarn Cluster)

上一篇说到Spark的yarn client运行模式,它与yarn cluster模式的主要区别就是前者Driver是运行在客户端,后者Driver是运行在yarn集群中。yarn client模式一般用在交互式场景中,比如spark shell, spark sql等程序,但是该模式下运行在客户端的Driver与Yarn集群有大量的网络交互,如果客户端与集群之间的网络不是很好,可能会导致性能问题。因此一般在生产环境中,大部分还是采用yarn cluster模式运行spark程序。

下面具体还是用计算PI的程序来说明,examples中该程序有三个版本,分别采用Scala、Python和Java语言编写。本次用Python程序pi.py做说明。

 1 from __future__ import print_function
 2
 3 import sys
 4 from random import random
 5 from operator import add
 6
 7 from pyspark.sql import SparkSession
 8
 9
10 if __name__ == "__main__":
11     """
12         Usage: pi [partitions]
13     """
14     spark = SparkSession15         .builder16         .appName("PythonPi")17         .getOrCreate()
18
19     partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2
20     n = 100000 * partitions
21
22     def f(_):
23         x = random() * 2 - 1
24         y = random() * 2 - 1
25         return 1 if x ** 2 + y ** 2 <= 1 else 0
26
27     count = spark.sparkContext.parallelize(range(1, n + 1), partitions).map(f).reduce(add)
28     print("Pi is roughly %f" % (4.0 * count / n))
29
30     spark.stop()

程序逻辑与上一篇Scala程序一样,就不再多做说明了。

下面来以yarn cluster方式来执行这个程序,注意执行程序前先要启动hdfs和yarn,最好同时启动spark的history server,这样即使在程序运行完以后也可以从Web UI中查看到程序运行情况。

输入以下命令:

[[email protected] ~]# $SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster $SPARK_HOME/examples/src/main/python/pi.py

以下是程序运行输出信息部分截图,

开始部分:

中间部分:

结束部分:

由于程序是以yarn cluster方式运行的,因此Driver是运行在Yarn集群当中(在BruceCentOS3上的ApplicationMaster进程当中),同时在BruceCentOS和BruceCentOS2上各运行了1个Executor进程(进程名字:CoarseGrainedExecutorBackend),而BruceCentOS4上的SparkSubmit进程仅仅作为yarn client向yarn集群提交spark程序。作为对比,在yarn client模式当中,客户端SparkSubmit进程不仅作为yarn client提交程序,而且同时还会运行Driver,并启动SparkContext,并且向Executor分配和管理Task,最后收集运行结果,因此yarn client模式程序输出信息会显示最终的打印结果。然而在yarn cluster模式当中,由于Driver运行在yarn集群的ApplicationMaster中,因此最终结果需要到ApplicationMaster进程的日志中取查看。可以通过如下命令查看。

SparkUI上的Executor信息:

BruceCentOS4上的客户端进程:

BruceCentOS3上的ApplicationMaster进程(包含Spark Driver):

BruceCentOS上的Executor:

BruceCentOS2上的Executor:

下面具体描述下Spark程序在yarn cluster模式下运行的具体流程。

这里是一个流程图:

  • Spark Yarn Client向YARN提交应用程序,类似于MapReduce向Yarn提交程序,会将程序文件、库文件和配置文件等上传到HDFS。
  • ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster中会运行Spark Driver,并进行SparkContext的初始化。
  • ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束。
  • 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度。
  • ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
  • 应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己。

以上就是个人对Spark运行模式(yarn cluster)的一点理解,其中参考了“求知若渴 虚心若愚”博主的“Spark(一): 基本架构及原理”的部分内容(其中基于Spark2.3.0对某些细节进行了修正),在此表示感谢。

原文地址:https://www.cnblogs.com/roushi17/p/spark_yarn-cluster.html

时间: 2024-10-21 20:57:29

理解Spark运行模式(二)(Yarn Cluster)的相关文章

Spark运行模式:cluster与client

When run SparkSubmit --class [mainClass], SparkSubmit will call a childMainClass which is 1. client mode, childMainClass = mainClass 2. standalone cluster mde, childMainClass = org.apache.spark.deploy.Client 3. yarn cluster mode, childMainClass = org

(2)spark运行模式

spark运行模式 下面我们来看一下spark的运行模式,根据上一篇博客我们知道spark的运行模式分为以下几种:local.standalone.hadoop yarn.我们说本地开发最好用local模式,直接搭建一个spark环境就可以跑了,因为测试的话本地是最方便的.standalone,用的比较少.hadoop yarn,这个是用的最多的,用spark的公司至少有70%是用yarn这个模式的.yarn是一个资源管理器,我们后面会说.下面我们就来讲解这几种运行模式. local运行模式 这

3.spark运行模式

spark支持的运行模式:本地模式.本地集群模式.standalone模式.yarn模式及mesos模式. 本地模式 local.local[N]或local[N,maxRetries].主要用于代码调试和跟踪.不具备容错能力,不适用于生产环境. 本地模式只有Driver,没有Master和Worker.执行任务的Executor与Driver在同一个JVM进程中. 本地集群模式 local-cluster[N,cores,memory].也主要用于代码调试和测试,是源码学习常用的模式.不具备容

Spark运行模式_spark自带cluster manager的standalone cluster模式(集群)

这种运行模式和"Spark自带Cluster Manager的Standalone Client模式(集群)"还是有很大的区别的.使用如下命令执行应用程序(前提是已经启动了spark的Master.Worker守护进程)不用启动Hadoop服务,除非你用到了HDFS的内容. 各节点启动的JVM进程情况如下: master节点上的进程 提交应用程序的客户端上的进程 某worker节点上的进程 客户端的SparkSubmit进程会在应用程序提交给集群之后就退出(区别1) Master会在集

Spark运行模式_基于YARN的Resource Manager的Custer模式(集群)

使用如下命令执行应用程序: 和"基于YARN的Resource Manager的Client模式(集群)"运行模式,区别如下: 在Resource Manager端提交应用程序,会生成SparkSubmit进程,该进程只用来做Client端,应用程序提交给集群后,就会删除该进程. Resource Manager在集群中的某个NodeManager上运行ApplicationMaster,该AM同时会执行driver程序.紧接着,会在各NodeManager上运行CoarseGrain

spark运行模式

Spark有以下四种运行模式: local:本地单进程模式,用于本地开发测试Spark代码; standalone:分布式集群模式,Master-Worker架构,Master负责调度,Worker负责具体Task的执行; on yarn/mesos:运行在yarn/mesos等资源管理框架之上,yarn/mesos提供资源管理,spark提供计算调度,并可与其他计算框架(如MapReduce/MPI/Storm)共同运行在同一个集群之上; on cloud(EC2):运行在AWS的EC2之上

Spark运行模式_基于YARN的Resource Manager的Client模式(集群)

现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用YARN来做为Spark的Cluster Manager,来为Spark的应用程序分配资源. 在执行Spark应用程序前,要启动Hadoop的各种服务.由于已经有了资源管理器,所以不需要启动Spark的Master.Worker守护进程.相关配置的修改,请自行研究. 使用如下命令执行应用程序 提交应用程序后,各节点会启动相关的JVM进程,如下: 在Resource Manager节点上提交应用程序,会生

Spark运行模式概述

Spark编程模型的回顾 spark编程模型几大要素 RDD的五大特征 Application program的组成 运行流程概述 具体流程(以standalone模式为例) 任务调度 DAGScheduler

Spark on YARN两种运行模式介绍

本文出自:Spark on YARN两种运行模式介绍http://www.aboutyun.com/thread-12294-1-1.html(出处: about云开发)   问题导读 1.Spark在YARN中有几种模式? 2.Yarn Cluster模式,Driver程序在YARN中运行,应用的运行结果在什么地方可以查看? 3.由client向ResourceManager提交请求,并上传jar到HDFS上包含哪些步骤? 4.传递给app的参数应该通过什么来指定? 5.什么模式下最后将结果输