【Spark速通】

embedded/2025/2/2 11:20:06/

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/embedded/158886.html

相关文章

QT常用控件

“ 别告诉孩子,我是危险的魔鬼~ ” 如何理解控件? 控件是GUI(图形用户界面)的通用概念,不止出现在QT中。当完全没有控件时,需要通过⼀些绘图 API ⼿动的绘制出按钮或者输⼊框等内容, 代码编写繁琐。 或是包…

STM32 中断系统

目录 中断 定义: 中断处理的过程: 1.中断申请: 2.中断响应: 3.中断处理: 4.中断向量 : 5.中断返回: 中断优先级 1.抢占优先级 2.响应优先级 3.自然优先级 中断嵌套 中断执行流程 中断源 NV…

Python 数据分析 - Matplotlib 绘图

Python 数据分析 - Matplotlib 绘图 简介绘图折线图单线多线子图 散点图直方图条形图纵置横置多条 饼图 简介 Matplotlib 是 Python 提供的一个绘图库,通过该库我们可以很容易的绘制出折线图、直方图、散点图、饼图等丰富的统计图,安装使用 pip install…

将点云转换为 3D 网格:Python 指南

3D 数据的世界往往是一个碎片化的景观。 存在点云,其细节丰富,但缺乏表面信息。 有3D 网格,它明确地定义表面,但创建起来通常很复杂。 将点云转换为网格弥补了这一差距并开启了许多可能性,从真实模拟到 3D 数字环境…

基于vue和elementui的简易课表

本文参考基于vue和elementui的课程表_vue实现类似课程表的周会议列表-CSDN博客,原程序在vue3.5.13版本下不能运行,修改两处: 1)slot-cope改为v-slot 2)return background-color:rgb(24 144 255 / 80%);color: #fff; …

C# 类与对象详解

.NET学习资料 .NET学习资料 .NET学习资料 在 C# 编程中,类与对象是面向对象编程的核心概念。它们让开发者能够将数据和操作数据的方法封装在一起,从而构建出模块化、可维护且易于扩展的程序。下面将详细介绍 C# 中类与对象的相关知识。 一、类的定义 …

【数据结构】_链表经典算法OJ:分割链表(力扣—中等)

目录 1. 题目描述及链接 2. 解题思路 2.1 思路1 2.2 思路2 2.3 思路3(本题采取该解法) 3. 题解程序 1. 题目描述及链接 题目链接:面试题 02.04. 分割链表 - 力扣(LeetCode) 题目描述: 给你一个链表…

【Postman接口测试】Postman的安装和使用

在软件测试领域,接口测试是保障软件质量的关键环节之一,而Postman作为一款功能强大且广受欢迎的接口测试工具,能够帮助测试人员高效地进行接口测试工作。本文将详细介绍Postman的安装和使用方法,让你快速上手这款工具。 一、Pos…