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

目录

一、引言 

二、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博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿维塔30亿元融资背后:价格战再席卷,如何守住品牌底线?

造车新势力阿维塔近期消息不断。 8月31日,阿维塔宣布完成B轮融资,规模达到30亿元,投后估值近200亿元。随后的9月2日,阿维塔科技宣布8月共交付新车1975辆,略高于上月的1786辆,稳居30万以上纯电SUV头部阵营。…

从官方文档看Redis

一.核心能力 Redis 1.In-memory data structures 内存数据结构 Redis以"键值对" 的方式来存储数据, 是一种"非关系型数据库" ps: MySQL以"表"的方式来存储数据, 是一种"关系型数据库" 2.Programmability 可编程性 Redis可以用脚本…

遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具,可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系,为不同条件下作物生长发育及…

【UE 材质】力场护盾和冲击波效果

目录 效果 步骤 一、制作力场护盾材质 二、制作冲击波材质效果 三、制作冲击波粒子效果 四、制作震动效果 效果 步骤 一、制作力场护盾材质 1. 首先新建一个第一人称角色游戏模板 2. 新建一个材质,用于作为力场护盾的材质,这里命名为“Mat_for…

cms之wordpress主题安装

WordPress主题安装教程的方法有两种,分为在线安装和上传安装,下面是主题详细安装方法的步骤。 后台在线安装主题 从后台的主题界面在线安装主题是最方便的WordPress主题安装方式。方法如下: 1 在WordPress后台,转到外观→主题 …

本地部署CodeLlama +GTX1080显卡 对接open-interpreter对接wxbot(一)

1.效果展示 开源项目GitHub - oobabooga/text-generation-webui: A Gradio web UI for Large Language Models. Supports transformers, GPTQ, llama.cpp (GGUF), Llama models. "Code Llama" 是一个大型代码语言模型的系列,基于 "Llama 2" 构建,为编程…

进程属性/进程状态

task_struct-PCB的一种 在Linux中描述进程的结构体叫做task_struct。进程也叫任务 task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。 task_ struct内容分类 标示符: 描述本进程的唯一标示符,用来区别其他进程。 …

Mysql高级——索引创建和使用

索引的创建 1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照物理实现方式&#xff…

一文带你走进软件测试的大门

目录 前言 需求 用户需求 软件需求 从测试人员的角度看需求 测试用例 测试环境 测试数据 预期结果 操作步骤 为什么要有测试用例 Bug的概念 世界上的第一个bug bug的定义 开发模型和测试模型 软件的生命周期 开发模型 瀑布模型 螺旋模型 增量、迭代 敏捷 …

C++--简单实现定长内存池

1.什么是定长内存池 在C/C中,动态申请内存都是通过malloc来申请的,但是实际上不是是直接从堆上直接申请的内存,而是通过malloc动态申请一大块内存,malloc就相当于一块内存池,然后分给程序使用,如果申请的内…

ResponseBodyAdvice 获取参数

废话不多说,简练,一针见血,解决问题,才是最好的。 首先肯定是重写了这个beforeBodyWrite方法 重点来了,获取请求参数: request.getBody()返回一个inputStream流,这里你可以 使用很多方法把这个…

《PostgreSQL中的JSON处理:技巧与应用》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

驱动开发--day2(内核不同模块的相互访问、字符设备驱动、led控制实验代码及现象)

实现三盏灯的控制,编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…

MyBatisPlus(二)基础Mapperr接口:增删改查

MyBatisPlus:基础Mapper接口:增删改查 插入一条数据 代码 Testpublic void insert() {User user new User();user.setId(6L);user.setName("张三");user.setAge(25);user.setEmail("zhangsanexample.com");userMapper.insert(use…

LeetCode(力扣)406. 根据身高重建队列Python

LeetCode406. 根据身高重建队列 题目链接代码 题目链接 https://leetcode.cn/problems/queue-reconstruction-by-height/ 代码 class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key lambda x: (-x[0], x[1]))que […

CSS:实现文字溢出显示省略号且悬浮显示tooltip完整信息

组件&#xff1a; element ui中的tooltip组件 思路&#xff1a;通过ref获取宽度进行判断&#xff0c;当子级宽度大于对应标签/父级宽度显示tooltip组件 <div class"bechmark-wrap"><ul ref"bechmarkUl"><liv-for"(item,index) in comp…

MySQL数据库技术笔记(1)

MySQL是一种关系数据库管理系统. 按照数据结构来组织、存储和管理数据的仓库. 数据库的发展&#xff1a; 1.层次模型存储&#xff1a;归为大类&#xff0c;分小类&#xff0c;也称树形结构 2.网状模型 3.关系模型&#xff1a;1对1的关系&#xff0c;1对多的关系&#xff0…

C++之生成详细汇编代码(二百一十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

留资机器人助你有效提高营销成功率

我们都知道&#xff0c;当客户产生留资行为&#xff0c;就要抓住机会&#xff0c;让工作人员及时地对客户进行回访&#xff0c;然后将留资线索跟踪、维系。而如何准确有效地提高客户保留率和转化率是营销成功的关键。所以对于企业来说&#xff0c;留资机器人正是引导客户留资&a…

Nebula Graph图数据库教程介绍

Nebula Graph图数据库教程介绍 ​ Nebula Graph&#xff08;星云图&#xff09;是一个开源的分布式图数据库系统&#xff0c;最初由中国的石墨烯数据库团队开发。它专门设计用于处理大规模图数据&#xff0c;并提供了高度可扩展性和性能。Nebula Graph支持多种图数据库的核心特…