理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]上一篇说到Spark的yarn client运行模式,它与yarn cluster模式的主要区别就是前者Driver是运行在客户端,后者Driver是运行在yarn集群中。yarn client模式一

上一篇说到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 = SparkSession
15         .builder
16         .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()

代码100分

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

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

输入以下命令:

[root@BruceCentOS4 ~]# $SPARK_HOME/bin/spark-submit –master yarn –deploy-mode cluster $SPARK_HOME/examples/src/main/python/pi.py

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

开始部分:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

  中间部分:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

  结束部分:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

 

由于程序是以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进程的日志中取查看。可以通过如下命令查看。

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

 

SparkUI上的Executor信息:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

  BruceCentOS4上的客户端进程:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

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

 理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

  BruceCentOS上的Executor:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

  BruceCentOS2上的Executor:

理解Spark运行模式(二)(Yarn Cluster)[通俗易懂]

 

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

这里是一个流程图:

理解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://daima100.com/10925.html

(0)
上一篇 2022-12-19
下一篇 2022-12-19

相关推荐

  • Python数据类型及其应用场景

    Python数据类型及其应用场景Python是一种高级编程语言,流行于众多领域,如Web开发、数据科学、人工智能等,而数据类型是Python语言中的基础。Python提供了多种数据类型,包括数值型、字符串型、列表、元组、字典、集合等,每一种类型都有其特定的应用场景。

    2024-02-22
    108
  • 安装mysql应用程序无法正常启动_mysql介绍

    安装mysql应用程序无法正常启动_mysql介绍下载并解压MySQL 下载mysql-8.0.17-win64 https://dev.mysql.com/downloads/mysql/8.0.html // 这里提供的是8.0以上x64版本

    2022-12-23
    142
  • Python List Index实现列表索引功能

    Python List Index实现列表索引功能在Python中,List是一种常用的数据类型。List是一个集合,其中的元素可以是不同的数据类型,并且可以动态地添加或删除元素。Python List Index是指通过索引操作符[]来操作List中的元素,从List中选取某一个元素。

    2024-03-12
    80
  • MySQL8-安装「建议收藏」

    MySQL8-安装「建议收藏」步骤: 官网下载 MySQL8 免安装软件包。 将下载好的软件解压到指定的路径。 在MySQL文件夹根目录创建文件my.ini,将以下内容复制到文件,按需修改地址。 #数据库服务端配置项 [mysq…

    2023-04-01
    144
  • Oracle行结果合计的实现

    Oracle行结果合计的实现Oracle行结果合计的实现,主要应用于日期结果的集计,下面是具体的实现代码。 With AA as ( select 'A' tNo , 10 B from dual union s

    2023-01-31
    154
  • 转:Oracle认证考券延期声明

    转:Oracle认证考券延期声明致广大Oracle认证(中国区)的考生们: 由于近期受疫情的影响,Pearson VUE暂时关闭了中国大陆的考试中心,并暂停至 2020 年 3 月底。 在此特殊阶段,针对无法预约并即将过期的考试券…

    2023-02-03
    157
  • mysql 执行查询SQL 一直执行不出结果「建议收藏」

    mysql 执行查询SQL 一直执行不出结果「建议收藏」今天执行一个mysql 语句, 一直在 执行,执行了5分钟了,还是没有出来结果。 # 每个组织下包括 同级或者下级的 注册店铺数 # 查询 历史每一天的每个组织下的当天存在的门店数 select d…

    2022-12-22
    140
  • HackerRank第一趴-[亲测有效]

    HackerRank第一趴-[亲测有效]CITY表: Field Type ID number NAME VARCHAR2(17) COUNTRYCODE VARCHAR2(3) DISTRICT VARCHAR2(20) POPULATI

    2023-05-20
    140

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注