2024-02-23(Spark)

1.RDD的数据是过程数据

RDD之间进行相互迭代计算(Transaction的转换),当执行开启后,代表老RDD的消失

RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了。

这个特性可以最大化的利用资源,老旧的RDD没有用了,就从内存中清理,给后续的计算腾出内存空间。内存中只存在一个RDD

2.RDD的缓存

当然,Spark也有缓存技术,Spark提供了缓存API,可以让我们通过调用API,将指定的RDD数据保留在内存或者硬盘上。保留了RDD的血缘关系。

RDD的缓存技术是分散存储的,分区数据各自存储到Executor所在的服务器上。

(有时候一个前置RDD,会被多个后续RDD使用,所以需要持久化一下)

3.RDD的CheckPoint

CheckPoint也是将RDD的数据保存起来,但是它仅支持硬盘存储,但是它不保留血缘关系。

CheckPoint技术是将RDD各个分区的数据集中存储到HDFS上 

(有时候一个前置RDD,会被多个后续RDD使用,所以需要持久化一下)

4.Jieba库用于中文分词

5.广播变量

使用场景:有时候一个Executor会处理多个分区数据,这些分区数据是接受相同的数据的,这个时候就不需要数据源一一给这些分区发一份分区数据了,只需要给这个Executor发一份数据就好,其所管辖的分区共享这份相同的数据。可以节约资源,降低IO,节约内存。

使用方式:使用boardcast()接口,将本地需要发送给分区的变量标记为广播变量就可以了

本地集合对象 和 分布式集合对象(RDD)进行关联的时候,需要将本地集合对象 封装为广播变量。可以节省网络IO的次数,Executor的内存占用

6.累加器

可以实现分布式的累加功能(将各个分区的值累加到一起)

Spark为我们提供了专门的累加器变量

7.小总结

广播变量解决了什么问题?

分布式集合RDD和本地集合进行关联使用的时候,降低内存占用以及减少网络IO的传输,提高性能。

累加器解决了什么问题?

分布式代码的执行过程中,进行全局累加。

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------Spark内核调度(重点理解)

8.DAG

DAG:有向无环图,有方向没有形成闭环的一个执行流程图(其实就是代码的一个执行流程图(RDD的转换。。。。RDD的执行)罢了,眼睛看着代码就能分析出来)

eg:

上图中,有三个DAG。

此外:上图也可以看出,一个程序Application,可能有多个Job(一条执行路线就是一个Job,可以理解为上图程序做了三件事(也可以说一个Action会产生一个Job(一个应用程序内的子任务)))

一个Application中,可以有多个JOB,每一个JOB内含一个DAG,同时每一个JOB都是由一个Action产生的

带有分区关系的DAG图:其实就是在有向无环的DAG图中把分区关系画出来而已。

9.DAG的宽窄依赖和阶段划分

窄依赖:父RDD的一个分区,全部将数据发给子RDD的一个分区

宽依赖:父RDD的一个分区,将数据发给子RDD的多个分区。宽依赖的别名:shuffle

10.DAG的阶段划分

对于Spark来说,会根据DAG,按照宽依赖划分不同的DAG阶段

划分依据:从后向前,遇到宽依赖,就划分出一个阶段,称之为stage

在stage的内部,一定都是窄依赖。

例如下图的两个stage:

11.Spark是怎么做内存计算的?DAG的作用?Stage阶段划分的作用?

1.Spark会产生DAG图

2.DAG图会基于分区和宽窄依赖关系划分阶段

3.一个阶段内部都是窄依赖,窄依赖内,如果形成前后1:1的分区对应关系,就可以产生许多内存迭代计算的管道

4.这些内存迭代计算的管道,就是一个个具体的执行Task

5.一个Task是一个具体的线程,任务跑在一个线程内,就是走内存计算了。

12.Spark为什么比MapReduce快?

1.Spark的算子十分丰富,MapReduce算子匮乏(Map和Reduce),MapReduce这个编程模型,很难在一套MR任务中处理复杂的任务,很多复杂的任务,是需要写多个MapReduce进行串联,多个MR串联通过磁盘交互数据。

2.Spark可以执行内存迭代,算子之间形成DAG,基于依赖划分阶段之后,在阶段内形成内存迭代管道。但是MapReduce的Map和Reduce之间的交互依旧是通过硬盘来交互的。

综上总结:

a.编程模型上Spark占优(算子丰富)

b.算子交互上,和计算上可以尽量多的内存计算而非磁盘迭代

13.Spark的并行度

在同一时间内,有多少个Task在同时运行

推荐设置全局并行度,不要针对RDD改分区,这可能会影响内存迭代管道的构建,或者会产生额外的Shuffle。

确保是CPUh核心数量的整数倍,最小是2倍,最大一般10倍或者更高均可。

14.Spark的任务调度

Spark的任务,由Driver进行调度,这个工作包含:

a.逻辑DAG的产生

b.分区DAG的产生

c.Task划分

d.将Task分配给Executor并监控其工作

15.Driver内的两个组件

DAG调度器

工作内容:将逻辑的DAG图进行处理,最终得到逻辑上的Task划分

Task调度器

工作内容:基于DAG Schedule的产出,来规划这些逻辑的task,应该在哪些物理的executor上运行,以及监控它们的运行。

16.Spark中的名词概念汇总

Application/应用:用户代码提交到Spark去运行的时候,这就是一个应用。一个Application由一个Driver去控制它的运行。

Application jar:如果是Java语言编写的程序,可以打成一个Application jar的jar包。

Driver program:程序main方法的入口,也是程序的调度者和管理者,也负责构建SparkContext。

Cluster manager/集群管理器:一个外部服务,用于管理整个集群的资源,也就是Master角色的东西

Deploye mode/部署模式:一般用YARN模式(又分为客户端模式 和 集群模式)

Worder node/Worker角色:单台服务器的资源管理者,负责在单个机器内去提供Spark程序运行所需要的资源。

Executor/程序的运行启动器:内部可以分为许多Task,可以理解为真正干活的。

Task/一个工作线程:它是Executor内最小的一个工作单元,这个工作单元对整个Spark任务进行任务的干活。

Job/并行化的计算集合:Job归属于Application,一个Application可以有多个Job。

Stage/阶段:在Job内部基于DAG关系图可以划分出许多Stage(划分依据:宽依赖),每个stage内部都是窄依赖,又因为是窄依赖,便可以构建内存迭代的管道,然后去设定并行的Task。

层级关系梳理

1.一个Spark环境可以运行多个Application

2.一个代码跑起来,会成为一个Application

3.Application内部可以有多个Job

4.每个Job由一个Action产生,并且每个Job有自己的DAG执行图

5.一个Job的DAG图,会基于宽窄依赖划分成不同的阶段。

6.不同的阶段内,会基于分区数量,形成多个并行的内存迭代管道

7.每一个内存迭代管道形成一个Task(DAG调度器划分将Job内划分具体的task任务,一个Job被划分出来的task在逻辑上称之为这个Job的taskset)

以上就是Spark程序的运行原理,重点理解

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

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

相关文章

【非递归版】归并排序算法(2)

目录 MergeSortNonR归并排序 非递归&归并排序VS快速排序 整体思想 图解分析​ 代码实现 时间复杂度 归并排序在硬盘上的应用(外排序) MergeSortNonR归并排序 前面的快速排序的非递归实现,我们借助栈实现。这里我们能否也借助栈去…

2.5G/5G/10G高速率网络变压器(网络隔离变压器)产品介绍(1)

Hqst华轩盛(石门盈盛)电子导读:高速率/2.5G 的带POE插件(DIP)款千兆双口网络变压器2G54801DP特点 一 ﹑2.5G高速率网络变压器(网络隔离变压器):2G54801DP外观与尺寸 2G54801DP这颗产品尺寸为:长…

设计模式浅析(九) ·模板方法模式

设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 模板方法模式 概念 模板方法模式(Template Method Pattern)在Java中是…

HP笔记本电脑如何恢复出厂设置?这里提供几种方法

要恢复出厂设置Windows 11或10的HP笔记本电脑,你可以使用操作系统的标准方法。如果你运行的是早期版本,你可以使用HP提供的单独程序清除计算机并重新安装操作系统。 恢复出厂设置运行Windows 11的HP笔记本电脑​ 所有Windows 11计算机都有一个名为“重置此电脑”的功能,可…

Llama2模型的优化版本:Llama-2-Onnx

Llama2模型的优化版本:Llama-2-Onnx。 Llama-2-Onnx是Llama2模型的优化版本。Llama2模型由一堆解码器层组成。每个解码器层(或变换器块)由一个自注意层和一个前馈多层感知器构成。与经典的变换器相比,Llama模型在前馈层中使用了不…

uni-app原生api的promise化以解决异步等待问题分析

相信各位在进行uni-app开发的时候会遇到各种关于异步回调问题,例如要传code给后端以换取session_key,在这之前需要先调用 uni.login,所以执行的顺序是必须同步等待的。在写这篇文章之前对于整体的流程概念需要做一个梳理,以便能更…

普中51单片机学习(8*8LED点阵)

8*8LED点阵 实验代码 #include "reg52.h" #include "intrins.h"typedef unsigned int u16; typedef unsigned char u8; u8 lednum0x80;sbit SHCPP3^6; sbit SERP3^4; sbit STCPP3^5;void HC595SENDBYTE(u8 dat) {u8 a;SHCP1;STCP1;for(a0;a<8;a){SERd…

分布式事务之2、3段提交协议

二阶段提交协议 二阶段提交(Two-phaseCommit)是在计算机网络以及数据库领域内&#xff0c;为了使分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法。 在分布式系统中&#xff0c;每个节点虽然可以知晓自己的操作是成功或者失败&#xff0c;却无法知道其…

项目登录方案选型

一.Cookie + Session 登录 大家都知道,HTTP 是一种无状态的协议。无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求返回数据,但不会记录任何信息。为了解决 HTTP 无状态的问题,出现了 Cookie。Co…

[嵌入式系统-33]:RT-Thread -18- 新手指南:三种不同的版本、三阶段学习路径

目录 前言&#xff1a;学习路径&#xff1a;入门学习-》进阶段学习》应用开发 一、RT-Thread版本 1.1 标准版 1.2 Nano 1.3 Smart版本 1.4 初学者制定学习路线 1.5 RT-Thread在线文档中心目录结构 1.6 学习和使用RT-Thread的三种场景 二、入门学习阶段&#xff1a;内…

面试redis篇-08数据淘汰策略

原理 当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。 Redis支持8种不同策略来选择要删除的key: noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是…

BTC网络 vs ETH网络

设计理念 BTC 网络 比特币是一种数字货币&#xff0c;旨在作为一种去中心化的、不受政府或金融机构控制的电子货币。其主要目标是实现安全的价值传输和储存&#xff0c;比特币的设计强调去中心化和抗审查。 ETH 网络 以太坊是一个智能合约平台&#xff0c;旨在支持分散的应…

thinkphp6定时任务

这里主要是教没有用过定时任务没有头绪的朋友, 定时任务可以处理一些定时备份数据库等一系列操作, 具体根据自己的业务逻辑进行更改 直接上代码 首先, 是先在 tp 中的 command 方法中声明, 如果没有就自己新建一个, 代码如下 然后就是写你的业务逻辑 执行定时任务 方法写好了…

Laravel03 路由到控制器与连接数据库

Laravel03 路由到控制器与连接数据库 1. 路由到控制器2. 连接数据库 1. 路由到控制器 如下图一些简单的逻辑处理可以放在web.php中&#xff0c;也就是路由的闭包函数里面。但是大的项目&#xff0c;我们肯定不能这么写。 为什么保证业务清晰好管理&#xff0c;都应该吧业务逻辑…

IP 电话

1 IP 电话概述 IP 电话是在互联网上传送多媒体信息。 多个英文同义词&#xff1a; VoIP (Voice over IP) Internet Telephony VON (Voice On the Net) 1.1 狭义的和广义的 IP 电话 狭义的 IP 电话&#xff1a;指在 IP 网络上打电话。 广义的 IP 电话&#xff1a;不仅仅是…

在Pycharm中运行Django项目如何指定运行的端口

方法步骤&#xff1a; 打开 PyCharm&#xff0c;选择你的 Django 项目。在菜单栏中&#xff0c;选择 “Run” -> “Edit Configurations...”。在打开的 “Run/Debug Configurations” 对话框中&#xff0c;选择你的 Django server 配置&#xff08;如果没有&#xff0c;你…

力扣链表篇

以下刷题思路来自代码随想录以及官方题解 文章目录 203.移除链表元素707.设计链表206.反转链表24.两两交换链表中的节点19.删除链表的倒数第N个节点面试题 02.07. 链表相交142.环形链表II 203.移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链…

pytorch -- torch.nn下的常用损失函数

1.基础 loss function损失函数&#xff1a;预测输出与实际输出 差距 越小越好 - 计算实际输出和目标之间的差距 - 为我们更新输出提供依据&#xff08;反向传播&#xff09; 1. L1 torch.nn.L1Loss(size_averageNone, reduceNone, reduction‘mean’) 2. 平方差&#xff08;…

openai.CLIP多模态模型简介

介绍 OpenAI CLIP&#xff08;Contrastive Language–Image Pretraining&#xff09;是一种由OpenAI开发的多模态学习模型。它能够同时理解图像和文本&#xff0c;并在两者之间建立联系&#xff0c;实现了图像和文本之间的跨模态理解。 如何工作 CLIP模型的工作原理是将来自…

npm install 失败,需要node 切换到 对应版本号

npm install 失败 原本node 的版本号是16.9&#xff0c;就会报以上错误 node版本问题了&#xff0c;我切到这个版本&#xff0c;报同样的错。降一下node&#xff08;14.18&#xff09;版本就好了 具体的方法&#xff1a;&#xff08;需要在项目根目录下切换&#xff09; 1. …