【Spark速通】

server/2025/2/4 6:01:00/

Spark介绍

  1. Spark诞生的背景与原因
    • MapReduce的局限性:MapReduce语义简单,仅支持map和reduce两种操作,编程范式强制拆分,语义死板且不丰富;运行速度慢,大量与磁盘交互以节约内存,却降低了任务执行效率;功能单一,主要用于大规模离线批处理,处理其他计算场景需结合多种框架,增加了维护成本 。
    • Spark的诞生目的:为解决MapReduce的上述问题,提供运行效率高、速度快且能支持多种计算场景的框架。
  2. Spark的特点与优势
    • 计算速度快:Spark底层的Spark Core对标MapReduce,但速度更快,它将数据全部拉到内存中计算,官网宣称比MapReduce快100倍(虽有夸张,但体现高效性)。
    • 提供多种计算场景:是一个all in one的框架。底层Spark Core用于批处理运算;上层提供Spark SQL接口做数仓,能将SQL转换为底层代码运算;Spark Streaming用于实时流处理,通过微批次处理方式,将实时流处理转换为短时间间隔的批处理计算;还提供MLlib做机器学习、GraphX做图计算等接口,官网展示其生态圈丰富。
  3. Spark在企业中的应用及运行模式
    • 企业应用优势:在企业中应用性好,搭建一套Spark集群就能满足多种计算场景需求。
    • 解决历史遗留问题的运行模式:对于之前使用Hadoop框架的企业,若想迁移到Spark,全部推倒重来成本过高。Spark提供多种运行模式,既可以单独安装Spark框架运行任务,也可以通过on YARN模式,在没有Spark集群时,将任务分发到Hadoop的YARN调度到HDFS的数据节点上进行运算,解决了企业的历史遗留问题。

RDD

  1. Spark基于RDD运算与RDD概念
    • Spark基于弹性分布式数据集(RDD)进行运算。RDD是分布式存储在各个节点的数据集合,由文件拆分的数据块组成,具有只读特性。对RDD处理后需将结果保存为新的RDD。

    • 在这里插入图片描述

    • 通过SparkContext对象的textFile算子可将HDFS数据文件读入并转化为RDD,这是后续处理的基础。

  2. Spark编程示例(词频统计)
    • 利用flatMap算子按tab键拆分文本行,得到单词集合并保存为新RDD;再用map算子为每个单词标1。

    • 在这里插入图片描述

    • 使用reduceByKey算子按K值聚合,相同K值的value累加求和,最后将结果通过saveAsTextFile保存为文本文件输出到HDFS。

  3. Spark的DAG图及RDD关系
    • Spark运算逻辑可绘制成有向无环图(DAG图)。文件的每个block是RDD的一个partition,RDD处理过程存在一对一和多对一的转换关系。
    • 如RDD1处理形成RDD2是一对一转换;RDD3按K值reduce时需SHUFFLE操作,导致RDD4生成时是多对一关系,通过DAG图可清晰呈现RDD之间的关系。
  4. RDD的弹性特点
    • RDD数据存于内存且只读,某个RDD的partition计算错误时,无需从源头重新读取数据,只需返回上一阶段重新处理即可恢复数据。
    • 一对一转换的弹性恢复较容易,多对一转换因涉及SHUFFLE恢复相对麻烦,但仍比从头计算要好。
  5. 区分RDD的transformation和action
    • transformation是对RDD进行转换构造,从一个RDD转换为新的RDD;action则是触发计算、生成或输出结果。
    • 例如RDD的map操作是transformation,而saveAsTextFile、first、count、collect、forEach等触发结果输出的操作是action。
  6. RDD的操作及依赖关系和开发语言推荐
    • RDD操作会使RDD之间产生依赖关系,一对一转换形成窄依赖,多对一转换形成宽依赖。宽依赖因涉及SHUFFLE,数据恢复麻烦,应尽量避免使用产生宽依赖的算子,如groupByKey、reduceByKey、sortByKey等。

    • 在这里插入图片描述

    • 推荐使用SCALA语言进行Spark开发,因为Spark框架由SCALA开发,其语法简洁,使用SCALA开发更顺畅 。


在这里插入图片描述
在这里插入图片描述

运行模式

  1. Spark运行模式概述:Spark提供多种运行模式,包括local模式、stand alone模式和on yarn模式。local模式用于本地单机测试,若代码在该模式下运行通过,可提交到其他模式。stand alone模式需搭建Spark集群,代码提交到集群运行。若没有Spark集群,只有Hadoop集群,则可使用on yarn模式提交代码运行。

  2. stand alone模式运行机制:在stand alone模式下,Spark集群主节点为master,从节点为worker。作业提交后,先申请资源运行driver。driver启动后解析作业,申请作业所需资源,master从worker中分配executor。分配好executor后,task分发到executor中执行,执行过程中task实时向driver汇报。所有task运行完成后,driver申请释放资源。
    在这里插入图片描述

  3. on yarn模式运行机制:在on yarn模式下,客户端向resource manager提交作业申请。resource manager在node manager中分配container,第一个container运行application master。由于Spark的管理进程是driver,yarn的管理进程是application master,通过在driver外面套一个application master的壳子进行协调。driver解析作业后,若需要资源,通知application master向resource manager申请。resource manager将申请到的资源(container)分配给application master,application master通知driver,driver把解析好的task分发到container中运行。task执行时实时向driver汇报,所有task完成后,driver通知application master释放资源,resource manager最终释放所有资源。注意在Spark框架中申请的资源叫executor,在yarn中叫container。

  4. on yarn模式的两种子模式:on yarn模式包含cluster模式和client模式。cluster模式常用于生产环境;client模式用于交互和调试,它与cluster模式的主要区别在于,client模式将driver放到了客户端,这样driver实时监控task返回的信息能直接回显在客户端控制台上,便于观察作业运行情况,而cluster模式下driver在某一个从节点上,客户端无法直接看到作业运行信息。调试时用client模式,作业没问题后可使用on yarn模式上线生产。


执行流程

在这里插入图片描述

  1. Spark执行流程概述:Spark执行从driver端开始,driver解析代码,先生成逻辑查询计划,再生成物理查询计划,随后将其打包成task集合,调度到executor执行,执行期间driver实时监控task信息并调度。

  2. 示例代码解析:以Scala编写的词频统计代码为例,借助SparkContext的textFile方法读取文本文件,经拆分单词、给单词标一、按K值聚合等操作,最终得到词频结果并输出保存。该代码运用链式编程,虽多行展示,但实际可写在一行。

  3. 逻辑查询计划:driver解析代码生成逻辑查询计划,此计划关注RDD(弹性分布式数据集)状态。在词频统计代码执行过程中,随着操作推进,RDD数据类型不断变化,逻辑查询计划会解析这些状态变化。

  4. 物理查询计划与stage划分
    在这里插入图片描述

    • 物理查询计划:物理查询计划关注底层数据状态,例如依据底层数据的block数量划分DAG图。在词频统计示例中,根据数据块划分RDD的partition,并依据操作特性(一对一转换或宽依赖操作)构建和转换RDD。
    • stage划分依据:根据DAG图中RDD之间的宽窄依赖进行stage切分。窄依赖(如一对一转换)的操作可放在同一个stage,而宽依赖(如涉及shuffle操作)则会将RDD切分成新的stage。
  5. 任务调度过程:划分好stage后,每个stage内的操作可打包成task,每个partition可对应一个task。生成的task放入set集合,然后发送到executor执行,执行过程中task实时向driver汇报。

  6. Spark任务监控页:Spark任务监控页在4040端口,通过访问Spark的IP地址加4040端口,可查看任务运行信息,如任务的DAG图、stage数量、每个stage的执行时间以及shuffle过程中的读写数据量等,这些信息对Spark任务调优至关重要。


http://www.ppmy.cn/server/164814.html

相关文章

Nginx 变量集合

文章来源:https://nginx.cadn.net.cn/varindex.html $ancient_browser $arg_ $args $binary_remote_addr (ngx_http_core_module) $binary_remote_addr (ngx_stream_core_module) $body_bytes_sent $bytes_received $…

【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)

理解Linux系统内进程信号的整个流程可分为: 信号产生 信号保存 信号处理 上篇文章重点讲解了 信号的产生,本文会讲解信号的保存和信号处理相关的概念和操作: 两种信号默认处理 1、信号处理之忽略 ::signal(2, SIG_IGN); // ignore: 忽略#…

具身智能体俯视全局的导航策略!TopV-Nav: 解锁多模态语言模型在零样本目标导航中的顶视空间推理潜力

作者:Linqing Zhong, Chen Gao, Zihan Ding, Yue Liao, Si Liu 单位:北京航空航天大学,新加坡国立大学,香港中文大学多模态实验室 论文标题:TopV-Nav: Unlocking the Top-View Spatial Reasoning Potential of MLLM …

回顾Maven

Maven Maven简介 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它 用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、 测试、打包和发布等工作。 管理jar包管理jar包之间的依赖关系(其中一个jar包可能同时依赖多个…

DroneXtract:一款针对无人机的网络安全数字取证工具

关于DroneXtract DroneXtract是一款使用 Golang 开发的适用于DJI无人机的综合数字取证套件,该工具可用于分析无人机传感器值和遥测数据、可视化无人机飞行地图、审计威胁活动以及提取多种文件格式中的相关数据。 功能介绍 DroneXtract 具有四个用于无人机取证和审…

gradle和maven的区别以及怎么选择使用它们

目录 区别 1. 配置方式 2. 依赖管理 3. 构建性能 4. 灵活性和扩展性 5. 多项目构建 如何选择使用 选择 Maven 的场景 选择 Gradle 的场景 区别 1. 配置方式 Maven: 使用基于 XML 的 pom.xml 文件进行配置。所有的项目信息、依赖管理、构建插件等都在这个文…

python学opencv|读取图像(五十五)使用cv2.medianBlur()函数实现图像像素中值滤波处理

【1】引言 在前述学习过程中,已经探索了取平均值的形式进行图像滤波处理。 均值滤波的具体的执行对象是一个nXn的像素核,对这个像素核内所有像素点的BGR值取平均值,然后把这个平均的BGR值直接赋给像素核中心位置的核心像素点,由…

OpenCV:图像轮廓

目录 简述 1. 什么是图像轮廓? 2. 查找图像轮廓 2.1 接口定义 2.2 参数说明 2.3 代码示例 2.4 运行结果 3. 绘制图像轮廓 3.1 接口定义 3.2 参数说明 3.3 代码示例 3.4 运行结果 4. 计算轮廓周长 5. 计算轮廓面积 6. 示例:计算图像轮廓的面…