• 详解Spark运行模式(local+standalone+yarn)


    一、简述

    Spark 有多种运行模式:

    1.可以运行在一台机器上,称为 Local(本地)运行模式。
    2.可以使用 Spark 自带的资源调度系统,称为 Standalone 模式。
    3.可以使用 Yarn、Mesos、Kubernetes 作为底层资源调度系统,称为 Spark On Yarn、Spark On Mesos、Spark On K8S。
     

    二、Client 和 Cluster 提交模式

            Driver 是 Spark 中的主控进程,负责执行应用程序的 main() 方法,创建 SparkContext 对象,负责与 Spark 集群进行交互,提交 Spark 作业,并将作业转化为 Task(一个作业由多个 Task 任务组成),然后在各个 Executor 进程间对 Task 进行调度和监控。

            根据应用程序提交方式的不同,Driver 在集群中的位置也有所不同,应用程序提交方式主要有两种:Client 和 Cluster,默认是 Client,可以在向 Spark 集群提交应用程序时使用 --deploy-mode 参数指定提交方式。

    1.client模式

    1)client mode下Driver进程运行在Master节点上,不在Worker节点上,所以相对于参与实际计算的Worker集群而言,Driver就相当于是一个第三方的“client”。

    2)正由于Driver进程不在Worker节点上,所以其是独立的,不会消耗Worker集群的资源。

    3)client mode下Master和Worker节点必须处于同一片局域网内,因为Drive要和Executorr通信,例如Drive需要将Jar包通过Netty HTTP分发到Executor,Driver要给Executor分配任务等。

    4)client mode下没有监督重启机制,Driver进程如果挂了,需要额外的程序重启。

    2.cluster模式

    1)Driver程序在worker集群中某个节点,而非Master节点,但是这个节点由Master指定。

    2)Driver程序占据Worker的资源。

    3)cluster mode下Master可以使用–supervise对Driver进行监控,如果Driver挂了可以自动重启。

    4)cluster mode下Master节点和Worker节点一般不在同一局域网,因此就无法将Jar包分发到各个Worker,所以cluster mode要求必须提前把Jar包放到各个Worker几点对应的目录下面。

    3.那么是选择client mode还是cluster mode呢?

            一般来说,如果提交任务的节点(即Master)和Worker集群在同一个网络内,此时client mode比较合适。

            如果提交任务的节点和Worker集群相隔比较远,就会采用cluster mode来最小化Driver和Executor之间的网络延迟。

    4.Spark运行模式配置

    根据Driver运行在哪分为:
    Client模式和Cluster模式

    用户在提交任务给 Spark 处理时,以下两个参数共同决定了 Spark 的运行方式。
    · –master MASTER_URL :决定了 Spark 任务提交给哪种集群处理。
    · –deploy-mode DEPLOY_MODE:决定了 Driver 的运行方式,可选值为 Client或者 Cluster。

    Master URLMeaning
    local在本地运行,只有一个工作进程,无并行计算能力。
    local[K]在本地运行,有 K 个工作进程,通常设置 K 为机器的CPU 核心数量。
    local[*]在本地运行,工作进程数量等于机器的 CPU 核心数量。
    spark://HOST:PORT以 Standalone 模式运行,这是 Spark 自身提供的集群运行模式,默认端口号: 7077。
    mesos-client./spark-shell --master mesos://host:port --deploy-mode client
    mesos-cluster./spark-shell --master mesos://host:port --deploy-mode cluster
    yarn-client在 Yarn 集群上运行,Driver 进程在本地,Work 进程在 Yarn 集群上。./spark-shell --master yarn --deploy-mode client。Yarn 集群地址必须在HADOOP_CONF_DIRorYARN_CONF_DIR 变量里定义
    yarn-cluster在 Yarn 集群上运行,Driver 和Work 进程都在 Yarn 集群上。./spark-shell --master yarn --deploy-mode cluster。Yarn 集群地址必须在HADOOP_CONF_DIRorYARN_CONF_DIR 变量里定义

    三、local模式

            所谓的 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学,调试,演示等。

    官方求 PI 案例

    1. [yy@hadoop102 spark]$ bin/spark-submit \
    2. --class org.apache.spark.examples.SparkPi \
    3. --executor-memory 1G \
    4. --total-executor-cores 2 \
    5. ./examples/jars/spark-examples_2.11-2.1.1.jar \
    6. 100

    基本语法:

    1. bin/spark-submit \
    2. --class <main-class>
    3. --master <master-url>\
    4. --deploy-mode <deploy-mode>\
    5. --conf <key>=<value> \
    6. ... # other options
    7. <application-jar>\
    8. [application-arguments]

    参数说明:

    –master 指定 Master 的地址,默认为 Local
    –class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
    –deploy-mode: 是否发布你的驱动到 worker 节点(cluster) 或者作为一个本地客户端(client) (default: client)*
    –conf: 任意的 Spark 配置属性, 格式 key=value. 如果值包含空格,可以加引号“key=value”
    application-jar: 打包好的应用 jar,包含依赖. 这个 URL 在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的 path 都包含同样的 jar
    application-arguments: 传给 main()方法的参数
    –executor-memory 1G 指定每个 executor 可用内存为 1G
    –total-executor-cores 2 指定每个 executor 使用的 cup 核数为 2 个

     

    四、Standalone 模式

            在 Spark Standalone 模式中,资源调度是由 Spark 自己实现的。 Spark Standalone 模式是 Master-Slaves 架构的集群模式,和大部分的 Master-Slaves 结构的集群一样,存在着 Master 单点故障的问题。对于单点故障的问题,Spark 提供了两种方案:

            基于文件系统的单点恢复(Single-Node Recovery with Local File System),将 Application 和 Worker 的注册信息写入文件中,当 Master 宕机时,可以重新启动 Master 进程恢复工作。该方式只适用于开发或测试环境。
            基于 Zookeeper 的 Standby Masters(Standby Masters with ZooKeeper)。ZooKeeper 提供了一个 Leader Election 机制,利用这个机制可以保证虽然集群存在多个 Master,但是只有一个是 Active 的,其他的都是 Standby。当 Active 的 Master 出现故障时,另外的一个 Standby Master 会被选举出来,对于恢复期间正在运行的应用程序,由于 Application 在运行前已经向 Master 申请了资源,运行时 Driver 负责与 Executor 进行通信,管理整个 Application,因此 Master 的故障对 Application 的运行不会造成影响,但是会影响新的 Application 的提交。

    1.Standalone-client提交任务方式

    • 提交命令
    1. ./spark-submit
    2. --master spark://node1:7077
    3. --class org.apache.spark.examples.SparkPi
    4. ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    5. 1000

    或者

    1. ./spark-submit
    2. --master spark://node1:7077
    3. --deploy-mode client
    4. --class org.apache.spark.examples.SparkPi
    5. ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    6. 100
    • 执行原理图解 

    • 执行流程

    1)client模式提交任务后,会在客户端启动Driver进程。
    2)Driver会向Master申请启动Application启动的资源。
    3)资源申请成功,Driver端将task发送到worker端执行。
    4)worker将task执行结果返回到Driver端。
    总结:
            client模式适用于测试调试程序。Driver进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在Driver端可以看到task执行的情况。生产环境下不能使用client模式,是因为:假设要提交100个application到集群运行,Driver每次都会在client端启动,那么就会导致客户端100次网卡流量暴增的问题。

    2.Standalone-cluster提交任务方式

    • 提交命令
    1. ./spark-submit
    2. --master spark://node1:7077
    3. --deploy-mode cluster
    4. --class org.apache.spark.examples.SparkPi
    5. ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    6. 100
    • 执行原理图解

    • 执行流程

    1)cluster模式提交应用程序后,会向Master请求启动Driver。
    2)Master接受请求,随机在集群一台节点启动Driver进程。
    3)Driver启动后为当前的应用程序申请资源。
    4)Driver端发送task到worker节点上执行。
    5)worker将执行情况和执行结果返回给Driver端。

    总结:

            Driver进程是在集群某一台Worker上启动的,在客户端是无法查看task的执行情况的。假设要提交100个application到集群运行,每次Driver会随机在集群中某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上。

     

    五、yarn模式

            独立部署(Standalone)模式由 Spark 自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是你也要记住,Spark 主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是和其他专业的资源调度框架集成会更靠谱一些。

            Spark On Yarn 模式的搭建比较简单,仅需要在 Yarn 集群的一个节点上安装 Spark 客户端即可,该节点可以作为提交 Spark 应用程序到 Yarn 集群的客户端。Spark 本身的 Master 节点和 Worker 节点不需要启动。前提是我们需要准备好 Yarn 集群。

    1.yarn-client提交任务方式

    • 提交命令
    1. ./spark-submit
    2. --master yarn
    3. --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    4. 100

    或者

    1. ./spark-submit
    2. --master yarn–client
    3. --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    4. 100

    或者

    1. ./spark-submit
    2. --master yarn
    3. --deploy-mode client
    4. --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    5. 100
    • 执行原理图解

    • 执行流程

    1)客户端提交一个Application,在客户端启动一个Driver进程。
    2)应用程序启动后会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。
    3)RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点。
    4)AM启动后,会向RS请求一批container资源,用于启动Executor.
    5)RS会找到一批NM返回给AM,用于启动Executor。
    6)AM会向NM发送命令启动Executor。
    7)Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。

    总结:

             Yarn-client模式同样是适用于测试,因为Driver运行在本地,Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加。

    • ApplicationMaster的作用:
    1. 为当前的Application申请资源
    2. 给NameNode发送消息启动Executor。

    注意:ApplicationMaster有launchExecutor和申请资源的功能,并没有作业调度的功能。

    2.yarn-cluster提交任务方式

    • 提交命令
    1. ./spark-submit
    2. --master yarn
    3. --deploy-mode cluster
    4. --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    5. 100

    或者

    1. ./spark-submit
    2. --master yarn-cluster
    3. --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
    4. 100
    • 执行原理图解

    • 执行流程

    1)客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
    2)RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
    3)AM启动,AM发送请求到RS,请求一批container用于启动Executor。
    4)RS返回一批NM节点给AM。
    5)AM连接到NM,发送请求到NM启动Executor。
    6)Executor反向注册到AM所在的节点的Driver。Driver发送task到Executor。

    总结:

            Yarn-Cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过yarn查看日志。

    • ApplicationMaster的作用:
    1. 为当前的Application申请资源
    2. 给NameNode发送消息启动Excutor。
    3. 任务调度。
  • 相关阅读:
    vue页面嵌入飞书网页组件,用于在类似ERP,OA等系统中展示在线文档
    【项目】图书管理系统
    Elastic stack8.10.4搭建、启用安全认证,启用https,TLS,SSL 安全配置详解
    第四章 玩转捕获数据包
    Pthread 并发编程(二)——自底向上深入理解线程
    在Idea中使用Git后,类名各种颜色代表的含义
    Python把word转为html(去水印版)
    数据库(SQL sever)
    高并发软件(网站,服务器端接口)的评价指标
    jQuery基础学习(属性操作、循环、事件冒泡委托、元素节点操作、滚轮事件、函数节流、json、ajax、jsonp与本地存储)
  • 原文地址:https://blog.csdn.net/u010147215/article/details/125545826