Spark on YARN 部署搭建详细图文教程

2023-09-15 15:21:47

目录

一、引言 

二、SparkOnYarn 本质

2.1 Spark On Yarn 的本质?

2.2 Spark On Yarn 需要啥?

三、配置 spark on yarn 环境

3.1 spark-env.sh 

3.2 连接到 YARN 中

3.2.1 bin/pyspark

3.2.2 bin/spark-shell

3.2.3 bin/spark-submit (PI)

四、部署模式 DeployMode 

4.1 Cluster 模式

4.2 Client 模式

4.3 两种模式的区别 

4.4 测试 

4.4.1 client 模式测试  

4.4.2 cluster 模式测试  

4.5 两种模式总结 

五、两种模式详细流程 

5.1 Client 模式 

5.2 Cluster 模式 


 

一、引言 

        按照前面环境部署中所了解到的,如果我们想要一个稳定的生产 Spark 环境,那么最优的选择就是构建 HA StandAlone 集群。

        不过在企业中,服务器的资源总是紧张的,许多企业不管做什么业务,都基本上会有 Hadoop 集群,也就是会有 YARN 集群。

        对于企业来说,在已有 YARN 集群的前提下在单独准备 Spark StandAlone 集群,对资源的利用就不高,所以在企业中,多数场景下,会将 Spark 运行到 YARN 集群中。

        YARN 本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理.。作为典型的计算框架,Spark 本身也是直接运行在 YARN 中,并接受 YARN 的调度的。所以,对于 Spark On YARN 无需部署 Spark 集群,只要找一台服务器,充当 Spark 的客户端,即可提交任务到 YARN 集群中运行。

二、SparkOnYarn 本质

2.1 Spark On Yarn 的本质?

  • Master 角色由 YARN 的 ResourceManager 担任。
  • Worker 角色由 YARN 的 NodeManager 担任。
  • Driver 角色运行在 YARN 容器内或提交任务的客户端进程中。
  • 真正干活的 Executor 运行在 YARN 提供的容器内。

2.2 Spark On Yarn 需要啥?

  1. 需要 Yarn 集群:已经安装了
  2. 需要 Spark 客户端工具,比如 spark-submit,可以将 Spark 程序提交到 YARN 中
  3. 需要被提交的代码程序:如 spark/examples/src/main/python/pi.py 此示例程序,或我们后续自己开发的 Spark 任务

三、配置 spark on yarn 环境

3.1 spark-env.sh 

具体安装 spark 步骤:Spark-3.2.4 高可用集群安装部署详细图文教程_Stars.Sky的博客-CSDN博客 

        确保:HADOOP_CONF_DIR、YARN_CONF_DIR 在 spark-env.sh 以及环境变量配置文件中即可(其他的配置文件都不需要修改,切 spark 和 YARN 在同一机器上):

(base) [root@hadoop01 /bigdata/spark-3.2.4]# vim conf/spark-env.sh 
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/
YARN_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/

3.2 连接到 YARN 中

3.2.1 bin/pyspark

bin/pyspark --master yarn --deploy-mode client|cluster

# --deploy-mode 选项是指定部署模式,默认是客户端模式
# client 就是客户端模式
# cluster 就是集群模式
# --deploy-mode 仅可以用在 YARN 模式下

注意:交互式环境 pyspark  和 spark-shell  无法运行 cluster 模式。

3.2.2 bin/spark-shell

bin/spark-shell --master yarn --deploy-mode client|cluster

注意:交互式环境 pyspark  和 spark-shell  无法运行 cluster 模式。 

3.2.3 bin/spark-submit (PI)

bin/spark-submit --master yarn --deploy-mode client|cluster /xxx/xxx/xxx.py 参数

四、部署模式 DeployMode 

        Spark On YARN 是有两种运行模式的,一种是 Cluster 模式,一种是 Client 模式。这两种模式的区别就是 Driver 运行的位置:

  • Cluster 模式即:Driver 运行在 YARN 容器内部,和 ApplicationMaster 在同一个容器内。
  • Client 模式即:Driver 运行在客户端进程中,比如 Driver 运行在 spark-submit 程序的进程中。

4.1 Cluster 模式

如图,此为 Cluster 模式 Driver运行在容器内部:

4.2 Client 模式

如图,此为Client 模式 Driver 运行在客户端程序进程中(以 spark-submit 为例) :

4.3 两种模式的区别 

4.4 测试 

4.4.1 client 模式测试  

假设运行圆周率 PI 程序,采用 client 模式,命令如下: 

(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executors 2 --total-executor-cores 2 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10
  • bin/spark-submit: 这是用于提交 Spark 任务的脚本。

  • --master yarn: 指定 Spark 集群管理器为 YARN。

  • --deploy-mode client: 这意味着 Spark 任务的 driver 程序将在客户端机器(即你提交命令的机器)上运行。

  • --driver-memory 512m: 分配给 driver 的内存为 512 MB。

  • --executor-memory 512m: 每个 Spark executor 使用 512 MB 内存。

  • --num-executors 2: 指定 Spark 应使用 2 个 executor 进程。

  • --total-executor-cores 2: 指定所有 executors 合计可使用的 CPU 核心数为 2。

  • /bigdata/spark-3.2.4/examples/src/main/python/pi.py: 这是你要运行的 Python 程序的路径。

  • 10: 这是传递给 pi.py 程序的一个参数。具体来说,这通常用于指定计算π值时的迭代次数或精度。 

日志跟随客户端的标准输出流进行输出:

4.4.2 cluster 模式测试  

假设运行圆周率 PI 程序,采用 cluster 模式,命令如下: 

(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executors 2 --total-executor-cores 2 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10

客户端是无日志信息和结果输出的: 

4.5 两种模式总结 

Client 模式和 Cluster 模式最最本质的区别是:Driver 程序运行在哪里。

Client 模式:学习测试时使用,生产不推荐(要用也可以,性能略低,稳定性略低)

  1. Driver 运行在 Client上,和集群的通信成本高
  2. Driver 输出结果会在客户端显示

Cluster模式:生产环境中使用该模式

  1. Driver 程序在 YARN 集群中,和集群的通信成本低
  2. Driver 输出结果不能在客户端显示
  3. 该模式下 Driver 运行 ApplicattionMaster 这个节点上,由 Yarn 管理,如果出现问题,yarn 会重启 ApplicattionMaster(Driver) 

五、两种模式详细流程 

5.1 Client 模式 

在 YARN Client 模式下,Driver 在任务提交的本地机器上运行,示意图如下: 

具体流程步骤如下:

  1. Driver 在任务提交的本地机器上运行,Driver 启动后会和 ResourceManager 通讯申请启动 ApplicationMaster;
  2. 随后 ResourceManager 分配 Container,在合适的 NodeManager 上启动ApplicationMaster,此时的 ApplicationMaster 的功能相当于一个 ExecutorLaucher,只负责向 ResourceManager 申请 Executor 内存;
  3. ResourceManager 接到 ApplicationMaster 的资源申请后会分配 Container,然后ApplicationMaster 在资源分配指定的 NodeManager 上启动 Executor 进程;
  4. Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行 main函数;
  5. 之后执行到 Action 算子时,触发一个 Job,并根据宽依赖开始划分 Stage,每个 Stage 生成对应的 TaskSet,之后将 Task 分发到各个 Executor 上执行。 

5.2 Cluster 模式 

        在 YARN Cluster 模式下,Driver 运行在 NodeManager Contanier 中,此时 Driver 与 AppMaster 合为一体,示意图如下:

具体流程步骤如下:

  1. 任务提交后会和 ResourceManager 通讯申请启动 ApplicationMaster;
  2. 随后 ResourceManager 分配 Container,在合适的 NodeManager 上启动 ApplicationMaster,此时的 ApplicationMaster 就是 Driver;
  3. Driver 启动后向 ResourceManager 申请 Executor 内存,ResourceManager 接到ApplicationMaster 的资源申请后会分配 Container,然后在合适的 NodeManager 上启动Executor 进程;
  4. Executor 进程启动后会向 Driver 反向注册;
  5. Executor 全部注册完成后 Driver 开始执行 main 函数,之后执行到 Action 算子时,触发一个 job,并根据宽依赖开始划分 stage,每个 stage 生成对应的 taskSet,之后将 task 分发到各个 Executor 上执行。

上一篇文章:Spark-3.2.4 高可用集群安装部署详细图文教程_Stars.Sky的博客-CSDN博客 

更多推荐

如何利用好Twitter的功能进行营销

虽然Twitter不是最复杂的社交网络,但您需要了解其中的一些特性和功能。这些是我们进行基本操作的地方。您进行探索并想出更多有创意的方式来使用这些功能。推文。推文是您可以分享的帖子和更新,限制在140个字符内。每一条推文都有存档,您可以查看自己和其他用户的推文。通过浏览其他用户的近期推文,您可以更好地了解他们关注的话题

SpringCLoud——docker中的数据卷

数据卷容器与数据耦合的问题不便于修改当我们要改Nginx的HTML内容时,需要进入容器内部修改,很不方便。数据不可复用在容器内的修改对外是不可见的。所有修改对新的容器是不可复用的。升级维护困难数据在容器内,如果要升级容器必然删除旧容器,所有数据都跟着删除了。数据卷(Volume)是一个虚拟目录,指向宿主机文件系统中的某

MQ和分布式事务

MQmq通知时,消费者没消费到怎么办简单聊聊消息中间件?你了解那些具体的消息中间件产品?mq的消费端是怎么处理的?整理一下你的消费端的整个处理逻辑流程,然后说说你的ack是在哪里返回的。按照你这样画的话,如果数据库突然宕机,你的消息该怎么确认已经接收?那如果发送端的服务是多台部署呢?你保存消息的时候数据库就一直报唯一性

Vue中如何进行表格排序与过滤

Vue中如何进行表格排序与过滤在Vue.js中,表格是一个常见的数据展示方式。很多时候,我们需要对表格中的数据进行排序和过滤,以提供更好的用户体验。本文将介绍如何在Vue中实现表格的排序和过滤功能,并提供相关的代码示例。准备工作在开始之前,我们需要准备一些基本的工作。首先,确保你已经安装了Vue.js,并且创建了一个V

Service 层异常抛到 Controller 层处理还是直接处理?

0前言一般初学者学习编码和[错误处理]时,先知道[编程语言]有一种处理错误的形式或约定(如Java就抛异常),然后就开始用这些工具。但却忽视这问题本质:处理错误是为了写正确程序。可是1啥叫“正确”?由解决的问题决定的。问题不同,解决方案不同。如一个web接口接受用户请求,参数age,也许业务要求字段是0~150之间整数

JMeter:断言之响应断言

一、断言的定义断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。可以是看成验证测试是否预期的方法。对于接口测试来说,就是测试Request/Response,断言即可以针对Request进行,也可以针对Response进行。但大部分是对Response做断言。JMeter常见的断言元件如下:1.响应断言2.J

【MySQL系列】如何在MySQL中使用触发器?MySQL触发器详解

MySQL可以通过触发器来实现自动化业务逻辑和操作。触发器是一种在数据库表发生特定操作时自动执行的存储过程,能够响应特定事件,如INSERT、UPDATE和DELETE语句。本文将详细介绍MySQL中的触发器概念、创建和使用方法,以及一些注意事项。一、概念触发器是一种与表相关联的一段代码,它会在特定事件(INSERT、

利用 SOAR 加快事件响应并加强网络安全

随着攻击面的扩大和攻击变得越来越复杂,与网络攻击者的斗争重担落在了安全运营中心(SOC)身上。SOC可以通过利用安全编排、自动化和响应(SOAR)平台来加强组织的安全态势。这一系列兼容的以安全为中心的软件可加快事件调查和响应速度。SOAR平台提高了对所有安全数据的可见性,简化了IT流程,自动执行了与安全相关的手动任务,

[EI复现】基于主从博弈的新型城镇配电系统产消者竞价策略(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述新型城镇的发展需要实现能源结构清洁化和能源利用高效

{案例分析}**市 SA-接通率CCE参数优化报告

【问题描述】SA-无线接通率主要包含了SA-RRC连接建立成功率,SA-NG接口UE相关逻辑信令连接建立成功率和SA-QosFlow建立成功率;现网接通率99.27%,【问题分析】接通率主要问题在于QosFlow建立成功率相对较差,RRC建立成功率基本处于99.6%以上,NG接通率接近百分之百;【问题根因】针对于Qos

Jtti:在centos7中怎么使用yum如何删除php

要在CentOS7中使用YUM删除PHP,请执行以下步骤:打开终端:可以通过SSH远程连接到您的CentOS服务器,或者在本地访问终端。以超级用户(root)身份登录:如果不是root用户,可以使用以下命令切换到超级用户:sudosu然后输入管理员密码以获得root权限。删除PHP:您可以使用YUM删除PHP及其相关包

热文推荐