spark三种模式【Standalone 模式、yarn 运行模式、local(本机)】
Standalone 模式
standalone模式也叫作独立模式,自带完整的服务,可单独部署到一个集群中,无序依赖任何其他资源管理系统。 从一定程度上来说,该模式是其他两种模式的基础。借鉴Spark开发模式,我们可以得到一种开发新型计算框架的一般思路:先设计出它的standalone模式,为了快速开发,期初不需要考虑服务(比如master、slaves)的容错性,之后开发相应的wrapper,将standalone模式下的服务原封不动的部署到资源管理系统yarn或者mesos上,有资源管理系统负责服务本身的容错。目前Spark在standalone模式下是没有任何单点故障问题的。这是接住zookeeper实现的,思想类似于hbase master 单点故障解决方案。将Spark standalone与MapReduce比较,会发现他们两个在架构上是完全一致的;
1)都是由master/slaves服务组成的,且期初master均存在单点故障,后来均通过zookeeper解决。
2)各个节点上的资源被被抽象成粗粒度的slot,有多少slot就能同时运行多少个task。不同的是,MapReduce将slot分为 map slot 和 reduce slot,他们分别只能供Map Task 和 Reduce Task使用,而不能共享,这是MapReduce资源利率低效的原因之一,二Spark则更优化一些,它不区分slot类型,只有一种slot,可以供各种类型的Task使用,这种方式可以提高资源利用率,但是不够灵活,不能为不同类型的Task定制slot资源。总之,这两种方式各有优缺点。
-master: 指定运行模式,spark://host:port, mesos://host:port, yarn, or local[n]
master 和 worker 是物理节点,driver 和 executor 是进程。
Client :客户端进程,负责提交作业到 Master。
Master :Standalone 模式中主控节点,负责接收 Client 提交的作业,管理
Worker,并命令 Worker 启动 Driver 和 Executor(集群模式)。
当 deployMode 为 CLIENT 时,driver 会在客户端直接运行.
1.master和worker节点
搭建spark集群的时候我们就已经设置好了master节点和worker节点,一个集群有多个master节点和多个worker节点。
master节点常驻master守护进程。负责管理worker节点,我们从master节点提交应用。
worker节点常驻worker守护进程。与master节点通信,并且管理executor进程。
一台机器可以同时作为master和worker节点
eg:有四台机器,我么可以选择把一台机器设为master节点,然后剩下三台设为worker节点,也可以把四台都设为worker节点,这种情况下,有一个机器及时master节点有事worker节点。类似于Hadoop中的namenode和datanode,主从关系。
2.driver和executor
driver进程就是应用的main()函数并且构建sparkContect对象,当我们提交了应用之后,变回启动一个对应的driver进程,driver本身会根据我们设置的参数占有一定的资源(主要指cou core和memory)。下面说一说driver和executor会做哪些事。

driver可以运行在master上,也可以运行在worker上(根据部署模式的不同 -deploy-mode端运行在client上还是cluster上)
driver首先会想集群管理者(standalone、yarn、mesos)申请spark应用所需要的资源,也就是executor。
然后集群管理者会根据spark应用所设置的参数在各个worker上分配一定数量的executor,每个executor,每个executor都占用一定数量的cpu和memory。
在申请到应用所需要资源后,driver就开始调度和执行我们编写的应用代码了。
driver进程会将我们编写的spark应用代码拆分成多个stage,每个stage执行一部分代码片段,并未每个stage创建一批task,然后蒋哲协task分配到各个executor中执行。
executor进程宿主在worker节点上,一个worker可以有多个executor。
每个executor持有一个线程池,每个线程可以执行一个task,executor执行完task以后将结果返回给driver,每个executor执行的task都属于同一个应用。
此外executor还有一个功能就是为了应用程序中要求缓存的RDD提供内存式存储,RDD是直接缓存在executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
YARN运行模式
spark on yarn(spark 作为客户端,spark需要做的事情是提交作业到yarn上执行)
yarn支持client和cluster模式: -deploy-mode:指定将driver端运行在client还是cluster
- client:提交作业的进程是不能停止的否则作业就挂了
- cluster:提交完作业,name提交作业端是可以断开的,因为driver是运行在am里面的
查看已经运行完的yarn的日志信息:yarn logs -applicationId
yarn运行模式(cluster模式和client模式)
cluster模式
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
examples/jars/spark-examples*.jar \
100
client模式
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
examples/jars/spark-examples*.jar \
10
spark-shell必须使用client模式(默认)
./bin/spark-shell --master yarn --deploy-mode client
两种模式的区别
cluster模式
Driver程序在YARN中 AM 运行,应用的运行结果不能在客户端显示,所以最好运行那些将结果最终保存在外部存储介质(如 HDFS、Redis、Mysql)而非stdout输出的应用程序,客户端的终端显示的仅是作为YARN的job的简单运行状况。
clinet模式:
Driver运行在Client上,应用程序运行结果在客户端显示,所有适合运行结果有输出的应用程序(如spark-shell)
原理
cluster模式

spark Driver首先作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的NodeManager节点上分配一个唯一的ApplicationMaster,有改ApplicationMaster管理全生命周期的应用。具体过程:
- 由client向ResourceManager提交请求,并上传jar到HDFS上
- 连接到RM
- 从RM的ASM(ApplicationsManager)中获取metric 、queue和resource等信息。
- upload app jar and spark-assembly jar
- 设置运行环境和container上下文(launch-container.sh 等脚本)
- ResourceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext 都有一个ApplicationMaster)
- NodeManager启动ApplicationMaster,并向ResourceManager AsM注册
- ApplicationMaster从HDFS中找到jar文件,启动SparkContext、DAGscheduler和YARN Cluster Scheduler
- ResourceManager向ResourceManager AsM 注册申请 container资源tor
- ResourceManager通知NodeManager分配Container,这是可以收到来自ASM关于Container的报告。(每个Container对应一个executor)
- Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。
client模式

在client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,病娇最终的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。
客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor默认的内存是1G,ApplicationMaster分配的内存是driver- memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名SparkSubmit的形式存在。
yarn和standalone的区别
yarn模式:只需要一个节点,然后提交作业即可,不需要哦spark集群的(不需要启动Master和Worker)
standalone模式:在spark集群上的每个节点都需要部署spark,然后需要启动spark集群(需要Master和Worker进程节点)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
