spark课后总结

news2025/4/15 12:32:51

Spark运行架构 :

运行架构

Spark 采用master - slave(主从)结构。Driver 相当于master,负责管理集群中的作业任务调度;Executor 相当于slave,负责实际执行任务

核心组件

Driver:是Spark驱动器节点,执行Spark任务中的main方法,负责实际代码执行。作业执行时,它将用户程序转化为作业,在Executor间调度任务,跟踪Executor执行情况,还通过UI展示运行情况。可简单理解为驱使应用运行的程序(Driver类) 。

 Executor:进程属性:Spark Executor 是集群工作节点(Worker)中的JVM进程 。
任务执行:负责在Spark作业里运行具体任务(Task),任务相互独立。Spark应用启动时它随之启动,贯穿应用生命周期。即便有Executor节点故障崩溃 ,Spark应用能将出错节点任务调度到其他Executor继续执行。
核心功能
执行Spark应用任务并把结果返回给Driver进程。
借助自身块管理器(Block Manager)为需缓存的RDD提供内存存储,RDD缓存在Executor进程内,利于任务利用缓存数据加速运算。
 Master & Worker
 Spark 独立部署:在Spark集群独立部署环境下,无需依赖其他资源调度框架,自身实现资源调度。
Master:作为一个进程,负责资源调度分配以及集群监控,类似Yarn环境中的ResourceManager(RM) 。
Worker:也是进程,运行在集群的一台服务器上,由Master分配资源来并行处理计算数据,类似Yarn环境中的NodeManager(NM) 。
 ApplicationMaster
 Hadoop - YARN 场景:Hadoop用户向YARN集群提交应用程序时,程序需包含ApplicationMaster 。
功能职责:用于向资源调度器申请执行任务的资源容器(Container) ,运行用户程序任务(job) ,监控任务执行、跟踪任务状态,处理任务失败等异常情况 。它起到ResourceManager(资源)与Driver(计算)之间解耦合的作用。

核心概念:

 Executor与Core

 Spark Executor是集群工作节点中的JVM进程,专门用于计算 。提交应用时,可通过参数指定其数量,以及每个Executor的内存大小、虚拟CPU核(Core)数量 ,相关启动参数如下:

 - num - executors:配置Executor的数量。

-executor - memory:配置每个Executor的内存大小。

-executor - cores:配置每个Executor的虚拟CPU core数量。

 并行度(Parallelism)

 在分布式计算框架中,多个任务可在不同计算节点同时执行,实现多任务并行执行(注意是并行而非并发) 。集群并行执行任务的数量即并行度,其数值取决于框架默认配置,应用程序运行中也可动态修改。

 有向无环图(DAG)

 计算引擎分类背景:大数据计算引擎框架按使用方式分四类,Hadoop的MapReduce将计算分Map和Reduce两个阶段,上层应用常需拆分算法、串联多个Job完成完整算法,存在弊端。

DAG框架产生:为解决上述问题,催生了支持DAG的框架,被划分为第二代计算引擎,如Tez及上层的Oozie ,不过大多还是批处理任务。

第三代计算引擎(以Spark为代表 ):特点是支持Job内部的DAG(不跨越Job)以及实时计算 。这里的有向无环图不是真正图形,是Spark程序逻辑映射出的数据流高级抽象模型。

Spark应用程序在Yarn环境中的提交流程

 有向无环图(DAG)定义

 DAG(Directed Acyclic Graph)即有向无环图,是由点和线组成的拓扑图形,具备方向性且不会形成闭环 。

 Spark应用程序提交流程

 指开发人员编写的应用程序通过Spark客户端提交到Spark运行环境执行计算的流程 。国内工作中Spark多部署到Yarn环境,这里介绍基于Yarn环境的提交流程。

 部署执行方式

Spark应用程序提交到Yarn环境执行时有Client和Cluster两种模式 ,主要区别在于Driver程序的运行节点位置:

 Yarn Client模式:用于监控和调度的Driver模块在客户端(任务提交的本地机器)执行,常用于测试 。Driver启动后会与ResourceManager通讯申请启动。

ApplicationMaster相关流程

ResourceManager分配container ,在合适的NodeManager上启动ApplicationMaster ,它负责向ResourceManager申请Executor内存。

ResourceManager接到ApplicationMaster的资源申请后分配container ,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程。

该文档围绕Spark Core中RDD展开,涵盖定义、属性、执行原理、序列化、依赖关系、持久化、分区器以及文件读取与保存等内容,旨在深入介绍RDD在Spark数据处理中的核心作用与相关知识。

 

RDD基础概念

- 定义:RDD即弹性分布式数据集,是Spark基本数据处理模型,为抽象类,代表弹性、不可变、可分区且元素可并行计算的集合。“弹性”体现在存储、容错、计算和分片等方面;“分布式”指数据存储在集群不同节点;“数据集”说明其封装计算逻辑但不保存数据 。

- 核心属性:包含分区列表、分区计算函数、RDD间依赖关系、分区器(K-V数据时可选)和首选位置(可选),这些属性在分布式计算、任务调度和数据处理中起关键作用。

执行原理:在Yarn环境中,Spark先启动集群、申请资源创建调度和计算节点,再划分任务,最后由调度节点将任务发送到计算节点执行,RDD在其中负责封装逻辑并生成任务。

RDD序列化

闭包检查:算子外代码在Driver端执行,算子内代码在Executor端执行,使用算子外数据形成闭包,需检测闭包内对象能否序列化,防止执行错误。

序列化方法和属性:与闭包检查相关,强调算子内外代码执行位置不同带来的序列化问题。

Kryo序列化框架:Spark 2.0起支持,比Java序列化快10倍,用于Shuffle时简单数据类型、数组和字符串的序列化,使用时仍需继承Serializable接口。

RDD依赖关系

血缘关系:RDD记录创建的Lineage,用于恢复丢失分区,其元数据和转换行为可帮助重新运算丢失数据。

依赖类型:窄依赖指父RDD分区最多被一个子RDD分区使用;宽依赖指父RDD分区被多个子RDD分区依赖,会引发Shuffle。

阶段和任务划分:DAG记录RDD转换和任务阶段,Application、Job、Stage和Task构成层次关系,一个Action算子生成一个Job,Stage数由宽依赖个数加1决定,Task个数取决于Stage中最后一个RDD的分区数。

RDD持久化

Cache缓存:通过Cache或Persist方法缓存计算结果,默认存于JVM堆内存,action算子触发时缓存,缓存丢失可重算丢失部分,Spark会自动持久化部分Shuffle中间数据。

CheckPoint检查点:将RDD中间结果写入磁盘,用于降低血缘依赖过长的容错成本,需Action操作触发。

区别:Cache不切断血缘依赖,数据存储可靠性低;Checkpoint切断血缘依赖,数据存储在高可靠文件系统,建议对Checkpoint的RDD使用Cache缓存以提高效率。

RDD分区器:Spark支持Hash分区(默认)、Range分区和自定义分区,分区器决定RDD分区个数、数据Shuffle后的分区走向及Reduce个数,仅Key - Value类型RDD有分区器。

RDD文件读取与保存:可从文件格式(text、csv、sequence、object文件)和文件系统(本地、HDFS、HBASE、数据库)两个维度区分,不同文件格式有相应读取和保存方法。

 

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

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

相关文章

智能资源管理机制-重传机制

一、发送端资源管理的核心机制 1. 滑动窗口(Sliding Window) 这是TCP协议的核心优化设计: 窗口动态滑动:发送端不需要保留所有已发送的分组,只需维护一个"发送窗口"窗口大小:由接收方通告的接…

设计模式 --- 原型模式

原型模式是创建型模式的一种,是在一个原型的基础上,建立一致的复制对象的方式。这个原型通常是我们在应用程序生命周期中需要创建多次的一个典型对象。为了避免初始化新对象潜在的性能开销,我们可以使用原型模式来建立一个非常类似于复印机的…

汽车软件开发常用的建模工具汇总

目录 往期推荐 1.Enterprise Architect(EA) 2.MATLAB/Simulink 3.TargetLink 4.Rational Rhapsody 5.AUTOSAR Builder 6.PREEvision 总结 往期推荐 2025汽车行业新宠:欧企都在用的工具软件ETAS工具链自动化实战指南<一&am…

SSM废品买卖回收管理系统的设计与实现

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 07…

@SchedulerLock 防止分布式环境下定时任务并发执行

背景 在一个有多个服务实例的分布式系统中,如果你用 Scheduled 来定义定时任务,所有实例都会执行这个任务。ShedLock 的目标是只让一个实例在某一时刻执行这个定时任务。 使用步骤 引入依赖 当前以redisTemplate为例子,MongoDB、Zookeeper…

实信号的傅里叶变换为何属于埃尔米特函数?从数学原理到 MATLAB 动态演示

引言 在信号处理领域,傅里叶变换是分析信号在频域表现的重要工具。特别是对于实信号,实信号是指在时间或空间域内取值为实数的信号,例如音频信号、温度变化等,它的傅里叶变换展现了一个非常特殊的数学性质——共轭对称性&#xf…

【VitePress】新增md文件后自动更新侧边栏导航

目录 说在前面先看效果代码结构详细说明侧边栏格式utils监听文件变化使用pm2管理监听进程 说在前面 操作系统:windows11node版本:v18.19.0npm版本:10.2.3vitepress版本:1.6.3完整代码:github 先看效果 模板用的就是官…

docker部署scylladb

创建存储数据的目录和配置目录 mkdir -p /root/docker/scylla/data/data /root/docker/scylla/data/commitlog /root/docker/scylla/data/hints /root/docker/scylla/data/view_hints /root/docker/scylla/conf快速启动拷贝配置文件 docker run -d \--name scylla \scylladb/…

Android 16应用适配指南

Android 16版本特性介绍 https://developer.android.com/about/versions/16?hlzh-cn Android 16 所有功能和 API 概览 https://developer.android.com/about/versions/16/features?hlzh-cn#language-switching Android 16 发布时间 Android 16 适配指南 Google开发平台&…

2.2goweb解析http请求信息

Go语言的net/http包提供了一些列用于表示HTTP报文的解构。我们可以使用它处理请求和发送响应。其中request结构体代表了客户端发生的请求报文。 核心字段获取方法 1. 请求行信息 通过 http.Request 结构体获取: func handler(w http.ResponseWriter, r *http.Req…

本地部署大模型(ollama模式)

分享记录一下本地部署大模型步骤。 大模型应用部署可以选择 ollama 或者 LM Studio。本文介绍ollama本地部署 ollama官网为:https://ollama.com/ 进入官网,下载ollama。 ollama是一个模型管理工具和平台,它提供了很多国内外常见的模型&…

redis之缓存击穿

一、前言 本期我们聊一下缓存击穿,其实缓存击穿和缓存穿透很相似,区别就是,缓存穿透是一些黑客故意请求压根不存在的数据从而达到拖垮系统的目的,是恶意的,有针对性的。缓存击穿的情况是,数据确实存在&…

txt、Csv、Excel、JSON、SQL文件读取(Python)

txt、Csv、Excel、JSON、SQL文件读取(Python) txt文件读写 创建一个txt文件 fopen(rtext.txt,r,encodingutf-8) sf.read() f.close() print(s)open( )是打开文件的方法 text.txt’文件名 在同一个文件夹下所以可以省略路径 如果不在同一个文件夹下 ‘…

【NLP解析】多头注意力+掩码机制+位置编码:Transformer三大核心技术详解

目录 多头注意力:让模型化身“多面手” 技术细节:多头注意力如何计算? 实际应用:多头注意力在Transformer中的威力 为什么说多头是“非线性组合”? 实验对比:多头 vs 单头 进阶思考:如何设计更高…

Downlink Sensing in 5G-Advanced and 6G: SIB1-assisted SSB Approach

摘要——本文研究了利用现有5G NR信号进行网络侧集成感知与通信(ISAC)的潜力。通常,由于其频繁的周期性可用性和波束扫描特性,同步信号块(SSB)是适合用于下行感知的候选信号。然而,正如本文所示…

设计模式 Day 8:策略模式(Strategy Pattern)完整讲解与实战应用

🔄 前情回顾:Day 7 重点回顾 在 Day 7 中,我们彻底讲透了观察者模式: 它是典型的行为型模式,核心理念是“一变多知”,当一个对象状态变化时,自动通知所有订阅者。 我们通过 RxCpp 实现了工业…

ONVIF/RTSP/RTMP协议EasyCVR视频汇聚平台RTMP协议配置全攻略 | 直播推流实战教程

在现代化的视频管理和应急指挥系统中,RTMP协议作为一种高效的视频流传输方式,正变得越来越重要。无论是安防监控、应急指挥,还是物联网视频融合,掌握RTMP协议的接入和配置方法,都是提升系统性能和效率的关键一步。 今天…

《微服务与事件驱动架构》读书分享

《微服务与事件驱动架构》读书分享 Building Event-Driver Microservices 英文原版由 OReilly Media, Inc. 出版,2020 作者:[加] 亚当 • 贝勒马尔 译者:温正东 作者简介: 这本书由亚当贝勒马尔(Adam Bellemare…

每日一题(小白)暴力娱乐篇26

我们先直接尝试暴力循环四轮看能不能得到答案,条件:四个数的平方相加等于这个数 ①接收答案result ②循环四轮i,j,k,l ③如果i*ij*jk*kl*lresult ④按照要求的格式输出这四个数字 代码如下👇 public s…

如何使用AI辅助开发R语言

R语言是一种用于统计计算和图形生成的编程语言和软件环境,很多学术研究和数据分析的科学家和统计学家更青睐于它。但对与没有编程基础的初学者而言,R语言也是有一定使用难度的。不过现在有了通义灵码辅助编写R语言代码,我们完全可以用自然语言…