rdd 相关信息整理

news2024/11/18 19:54:08

RDD 是什么?

官网描述

A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,
partitioned collection of elements that can be operated on in parallel

RDD 是三个单词的首字母缩写,它表示弹性分布式数据集,是 spark 最基本的数据抽像,代表一个不可变、可分区、里面元素可以被并行操作的集合。

  • DataSet 表示它是一个集合,里面存储了很多数据。
  • Distributed 说明数据是分布式存储,数据拆分成小块存储在不同的物理机上,后方便后期进行分布式并行计算。
  • Resilient (弹性)表示RDD 的数据可以保存在内存中或者是磁盘中。自己可以设置,默认保存在内存。

RDD 五大特性

(1) - A list of partitions
(2) - A function for computing each split
(3) - A list of dependencies on other RDDs
(4) - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
(5) - Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
  1. 一组分区列表的集合,即一个 RDD 中包含多个(数据)分区。后期 spark 任务执行RDD时,将一个分区划分为一个 task ,多个 task 并行执行。

  2. 作用在每一个分片(分区)上的函数。代码中开发者只写了一行操作语句,等真正执行时,该函数会在 RDD 的每个分区上都执行一遍。

  3. 一个 RDD 会依赖其他多个 RDD,上下 RDD 的依赖关系形成血统(lineage)。spark 任务的容错机制就是根据这个特性而来的。

  4. (可选项)针对 kv 类型的 RDD 才有分区函数(必须产生 shuffle),如果不是 kv 类型的 rdd,它的分区函数是 None,表示没有。

    在 spark 中有两种分区函数:

    第一种:HashPartitioner 函数,对 key 去 hashcode 值,然后对分区数取余获取分区号。【默认使用这种】

    第二种:RangePartitioner 函数,它是按照一定的范围进行分区,相同范围的 key 会进入到同一个分区中。

  5. (可选项)一组最优的数据块位置列表,数据的本地性,数据的位置最优。spark 任务计算会优先考虑存有数据的节点来开启计算任务,即数据在哪里,计算任务就放在那里,这样就减少了网络传输,提升性能。

RDD 的算子分类

RDD 算子主要分为两种类型:

  1. transformation(转换)
    • 它可以实现把一个 RDD 转换成另一个 RDD,程序在执行到这种类型的 RDD 代码时只是构建依赖(血统)关系,不会触发真正的运算操作。(这跟面向硬件编程、tensorflw 的风格有点像,先画“图”再触发执行)
    • 比如:flatMap、map、reduceByKey。
  2. action(动作)
    • 它会出发真正的执行,按照前面画的“图”执行。
    • 比如:collect、saveAsTextFile

RDD之间的依赖关系

两种依赖关系:宽依赖和窄依赖。

窄依赖:父 RDD 的 partition 最多只被子 RDD 的一个 partition 所使用(一对一,多对一)。比如 map、filter、flatMap 等算子操作。

宽依赖:子 RDD 多个 partition 数据会依赖于父 RDD 的同一个 partition 分区数据(一对多)。比如:reduceByKey、groupByKey、sortByKey等算子。

窄依赖不会产生 shuffle,宽依赖会。

image-20221201193959090

代码中 rdd 之间的依赖关系形成了血统(lineage)。如果某个 RDD 的分区数据丢失后,可以通过血统关系重新计算来恢复得到丢失部分的分区数据。

什么是 shuffle

简单来说,shuflle 过程就是将分布在集群多个节点上的同一个 key 拉取到同一个节点上,进行聚合活 join 等操作。比如 reduceByKey、join 等算子,都会触发shuffle 操作。在 shuffle 过程中,各节点上的相同 key 都会先写入本地磁盘中,然后其他节点需要通过网络传输拉取各个节点上磁盘文件中相同的 key。而且相同 key 拉取到同一个节点上执行聚合操作时,还有可能因为一个节点上处理的 key 过多,导致内存不够存放,进而溢出写到磁盘上。因此在 shuffle 过程中会发生大量的磁盘 IO 和 网络 IO,这也是 shuffle 性能交差的主要原因。

RDD 的缓存机制

RDD 缓存是什么?

把 RDD 的数据保存在内存或者是磁盘中,后续需要使用该数据时可以直接从缓存中读取,避免了重复计算。

如何设置 RDD 缓存?

参考该链接的原则三

cache 和 persist 的区别?

cache 其本质是调用了 pesist 方法,它是把数据放入缓存中。persist 可以把数据存放在内存或者磁盘中,该方法可以传入不同的缓存级别,这些缓存级别都定义在 StorageLevel 中。

RDD 缓存怎么清除

方式一:系统自动清楚,当应用程序执行完成之后,缓存数据也就消失了。

方式二:手动清除,调用unpersist(true) 方法。

DAG 有向无环图的划分

Directed Acyclic Graph 它是按照程序中的 RDD 之间的依赖关系生成的一张有方向但无环的图。

1、为什么要划分 stage?

一个 job 任务中可能有大量的宽窄依赖,宽依赖会产生 shuffle 而窄依赖不会。划分完 stage 后,在同一个 stage 中只有窄依赖没有宽依赖,这些窄依赖是可以独立并行的。

2、如何划分 stage?

从最后一个 RDD 往前推,先创建一个 stage,它实际上是最后一个 stage。如果遇到窄依赖,就将该 RDD 加入 stage 中,如果遇到宽依赖就切开,重新创建新的 stage,继续往前推,直到最开始的 RDD。整个划分stage 的过程就结束了。

3、stage 如何执行?

stage 内部会根据数据分区划分成多个 task,spark 任务执行时,stage 之间按照前后关系依次执行,stage 内部的每个 task 执行自己分区上的数据,这些 task 并行执行相同的运算。

参考链接

https://www.bilibili.com/video/BV1AJ411R7rb/?p=11&spm_id_from=pageDriver&vd_source=8a9f7d97e5a2fbdbe8a4a83a47d251b9

https://tech.meituan.com/2016/04/29/spark-tuning-basic.html

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

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

相关文章

火爆全网的ChatGPT上手体验,文尾免费送账号!

文章目录1. ChatGPT公开信息2. ChatGPT上手体验3. ChatGPT目前趋势4. 福利派送1. ChatGPT公开信息 近期关于网路上对 ChatGPT(OpenAI发布的一款人工智能对话引擎)的讨论比较多。官方对ChatGPT的定义如下: We’ve trained a model called Cha…

[Linux打怪升级之路]-文件操作

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识操…

python -- PyQt5(designer)中文详细教程(七)控件2

控件2 本章我们继续介绍PyQt5控件。这次的有 QPixmap , QLineEdit , QSplitter ,和 QComboBox 。 图片 QPixmap 是处理图⽚的组件。本例中,我们使用 QPixmap 在窗⼜⾥显示⼀张图片。 from PyQt5.QtWidgets import (QWidget, QH…

PLC远程监控助力食品废水处理智能化管理

食品加工行业是用水大户,因其原料广泛、成品丰富,中间需要多种不同的加工工艺,因此排放的废水差异很大,废水量也不一样,对污水处理厂提出不同的要求。为了保证污水处理工作的稳定进行,保证视频废水的净化效…

Matplotlib入门[06]——figures,subplots,axes和ticks对象

Matplotlib入门[06]——figures,subplots,axes和ticks对象 参考: https://ailearning.apachecn.org/Matplotlib官网matplotlib xticks yticks import matplotlib.pyplot as pltfigures,axes和ticks的关系 这些对象的关系可以用下图表示&…

基于jsp+mysql+ssm服装商城平台-计算机毕业设计

项目介绍 实现一个基于SSM框架的服装商城平台的的设计与开发。实现用户从浏览服装,搜索服装,加入购物车,下订单,评论服装一整个购物流程的功能,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统使用mysql…

Matter中国开发者大会实录(2022年12月2日,深圳)

目录 背景介绍 Nodic-Matter Silicon Labs-Matter Telink-Matter NXP-Matter BEKEN-Matter ESP32-Matter 背景介绍 2022年12月2日,Matter中国区开发者大会在深圳举行。大概有300多位开发者到会,我也是其中的300分之一。这次大会从早上9点半开始&a…

pybind11的Hello World

pybind11的Hello World pybind11 是用来将c的函数\类等封装为python模块的。从而在python中就可以调用C的库。 安装 pybind11是个C的header-only的库。因此无需安装,只需要有头文件即可。 自己新建一个C文件夹。在文件夹内将pybind作为一个外部库,使…

第七次更新,Spring Cloud Alibaba,迎接微服务生态的下一个十年

Spring Cloud Alibaba是什么? 2022年都快过完了,我相信大家肯定不用我说Spring Cloud Alibaba是什么了! 近期阿里最新开源了一份,Spring Cloud Alibaba(全解第7版),我大概看了一下&#xff0c…

JAMA Neurology:帕金森病跨疾病阶段的新兴神经成像生物标记物

意义:帕金森病(PD)的成像生物标记物在临床试验中的发病进程监测方面起到越来越重要,也具有改善临床护理和管理的潜力。这篇综述阐述了临床医生和研究人员需要明确在临床过程中使用的PD诊断和发病进程的成像生物标记物的时间相关性。磁共振成像(扩散成像、…

目标检测算法——人体姿态估计数据集汇总(附下载链接)

🎄🎄近期,小海带在空闲之余收集整理了一批人体姿态估计数据集供大家参考。 整理不易,小伙伴们记得一键三连喔!!!🎈🎈 一、KTH 多视图足球数据集 数据集链接&#xff1a…

python快速实现NPV净现值计算

净现值指未来资金(现金)流入(收入)现值与未来资金(现金)流出(支出)现值的差额,是项目评估中净现值法的基本指标。未来的资金流入与资金流出均按预计折现率各个时期的现值…

2023年天津仁爱学院专升本报名确认缴费考试流程

2023年天津仁爱学院专升本报名确认缴费操作流程说明及考试时间一、报名操作流程 1. 报名注册 请考生于2022年12月7日上午9点—12月11日中午12:00点登录报名系统https://jw.tjrac.edu.cn/zsb,点击“注册”按钮后进入报名登录界面,先请仔细阅读…

多线程学习笔记(三)

一、缓存行 缓存行:从缓存中读取数据是按照一块来读取的,这一块叫做缓存行,64字节大小缓存一致性协议:当两个数位于同一个缓存行时,有两个线程需要同时读取了缓存行中的数据后进行修改,需要和另一个线程的…

如何使用CCES来生成双核DSP的可烧写文件以及Flash Program

作者的话 之前的文章里有写到如何使用CCES来进行DSP的flash program,那都是单核的DSP,而ADI还有很多双核甚至三核DSP,这些DSP应该如何操作呢,会有哪些不同?我再写一个文档来说一下。 跟单核DSP一样,在 CC…

【测绘程序设计】——角度与弧度的转换(C#,C++,Python)

本文分享了 测绘程序设计——角度与弧度的转换(含C#、C++和Python版),相关源代码(完整工程,直接运行)及使用示例如下。 目录 Part.Ⅰ 使用示例Chap.Ⅰ C#版Chap.Ⅱ C++版Chap.Ⅲ Python版Part.Ⅱ 代码分析Chap.Ⅰ C#版Chap.Ⅱ C++版Chap.Ⅲ Python版Part.Ⅲ 源码下载Part…

实战YOLO V5推演(TensorRT版本 C++)

提示:兜兜转转还是来到了C,欠的债该还的得还,因此本篇文章试图从C来撬动tensorrt 完成转换模型和推理,而不是借助python库 文章目录前言一、Tensorrt前置1.1 Tensorrt基本概念1.2 异步推演说明二、实战YOLO V5推演1.TensorRT模型转…

大学电子系C++模拟考试

随手附上一些代码,未必是最优解,仅供参考。 加密四位数 【问题描述】 输入一个四位数,将其加密后输出。方法是将该数每一位的数字加9,然后除以10取余作为该位上的新数字,最后将千位上的数字和十位上的数字互换&#…

Prometheus 监控mysql

目录 下载安装mysqld_exporter 在mysql中创建监控用户并赋权 启动mysqld_exporter 添加到系统服务 浏览器访问服务器9104端口 在prometheus定义job来监控mysqld 运行prometheus并在端口9090上进行访问查看节点信息 根据具体需求再在可视化平台上定义数据源来进行可视化…

Java数据结构之树与二叉树

2.3 二叉树的性质(重点,选择题常考) 2.4 二叉树的链式存储 2.5 二叉树的基本操作 2.5.1 前提说明 2.5.2 二叉树的遍历 2.5.3 二叉树基本操作的实现(重点) 1. 树形结构 1.1 树的概念 树是一种非线性的数据结构&…