Spark Core----RDD详解

news2024/11/24 17:45:33

为什么需要RDD

分布式计算需要:

  • 分区控制(多台机器并行计算,将一份数据分成多份,在不同机器上执行)
  • Shuffle控制(不同分区数据肯定需要进行相关的关联,不同分区进行数据传输叫Shuffle控制)
  • 数据存储\序列化\发送
  • 数据计算API
  • 等一些列功能

这些功能,不能简单的通过Python内置的本机集合对象(如 List\字典)去完成
我们在分布式框架中,需要有一个统一的数据抽象对象,来实现上述分布式计算所需功能。

这个抽象对象,就是RDD。它可以让海量数据在spark集群中进行均等分区,同时分区之间的交互,也就是Shuffle,RDD也提供相应的实现代码。以及数据的存储,在内存中的,在磁盘中的,网络序列化、IO,包括提供一些高级计算API。这些东西RDD都有提供。所以RDD是spark中最重要的一个核心抽象对象。

什么是RDD

RDD概念的诞生来自于一片国外论文
Matei等人提出了RDD这种数据结构
在这里插入图片描述
标题翻译过来,弹性分布式数据集:一个在内存集群计算中可以实现高度容错的计算对象。

RDD定义
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可
分区、里面的元素可并行计算的集合。

  • Dataset:一个数据集合,用于存放数据的。
  • Distributed:RDD中的数据是分布式存储的,可用于分布式计算。(RDD的数据是跨越机器存储的,也可以是认为跨进程)
  • Resilient:RDD中的数据可以存储在内存中或者磁盘中。(可以进行动态扩容,动态缩容。内存和磁盘之间可以相互转移)

RDD 五大特性

特性1:RDD是有分区的

分区时RDD数据存储的最小单位
一份RDD的数据,本质上是分隔成了多个分区
在这里插入图片描述
如上图,以三个物理存在的分区,组成了一个逻辑上的RDD对象
这个抽象对象指的是代码里面的RDD对象,但它的底层实体是运行在服务器上的RDD对应的分区

代码演示:
启动spark本机模式进行测试
有个问题记录一下,spark在不读取hadoop上的文件时,是否可以独立运行?因为我刚才没有启动Hadoop,启动spark报错。
网上搜了一堆,结论是:可以的,但是需要特定版本的spark。
还有就是为什么在 spark交互式客户端中写代码,我们需要像前面demo那样创建 SparkContext对象。看截图,因为spark已经为我们创建了。我们只管写executor执行的代码。

以下代码证明了,RDD是分区存储的。
在这里插入图片描述

特性2:RDD的方法会作用在其所有分区上

简单的说,虽然数据是分区存储,但是在处理数据时,所有分区数据都会进行处理。也就是说一段代码执行之后,所有分区数据都会被影响。
代码中,逻辑上只写了一个map,但是物理层面上每个分区都会执行。
在这里插入图片描述

特性3:RDD之间是有依赖关系(RDD有血缘关系)

在这里插入图片描述
如上代码,RDD之间是有依赖关系的,
比如:RDD2会产生RDD3,但是RDD2 依赖RDD1
同样,RDD3会产生RDD4,但是RDD3 依赖RDD2
会形成一个链条,这个链条称之为RDD的血缘关系。也叫做RDD的迭代计算关系。
t.txt -> rdd1 -> rdd2 -> rdd3 -> rdd4

特性4:Key-Value型的RDD可以有分区器

这个特性是可选的特性,不是无时无刻都存在的。
默认分区器:Hash分区规则,可以手动设置一个分区器(rdd.partitionBy的方法来设置)
这个特性是可能的,因为不是所有RDD都是 Key-Value型
Key-Value RDD:RDD中存储的二元元组,这就是Key-Value型RDD
二元元组:只有2个元素的元组,比如:(“hadoop”,6)
Hash分区规则: 如果我RDD存储了 (“hadoop”,6)(“hadoop”,6)(“flink”,3)(“spark”,1)(“spark”,1)
现在有三个分区,hadoop的会在一个分区,flink在一个分区,spark在一个分区

特性5:RDD的分区规划,会尽量靠近数据所在的服务器

在初始RDD(读取数据的时候)规划的时候,分区会尽量规划到 存储数据所在的服务器上
因为这样可以走本地读取,避免网络读取
本地读取:Executor所在的服务器,同样是一个DataNode,同时这个DataNode上有它要读取的数据,所以可以直接读取机器硬盘即可,无需走网络传输
网络读取:读取数据,需要经过网络的传输才能读取到

本地读取性能 高于 网络读取性能

总结,Saprk会在确保并行计算能力前提下,尽量确保本地读取
这里是尽量确保,不是100%保证
所以这个特性也是可能。

例如:我有三台机器,机器1:datanode1,nodemanager1,机器2:datanode2,nodemanager2,机器3:datanode3,nodemanager3
一份文件分块存储在 机器1 和机器3上。
Spark运行在YARN集群上。Master就在ResouceManager中。如果我启动2个Executor去执行程序,那么这两个Executor大概率在机器1和机器2上。
为什么说是大概率呢?因为要保证并行计算能力,要是机器1已经负载很重了,那就不会再去部署Executor了。
又或者说,你计算量很大,你开了3个Executor,那么均分在三台机器上。虽然说会网络传输数据,但是从后面走,数据处理时间节约了,这个网络传输时间又算什么呢。所以也需要使用者进行判断。

WordCount案例分析(以RDD视角)

在这里插入图片描述
WordCount代码执行图示
在这里插入图片描述
特性1:分区存储。从HDFS中读取文件,存储到三个分区中
特性2:方法会作用在所有分区上
特性3:RDD之间有依赖关系
特性4:分区器,在RDD3 到 RDD4过程中,将元组key值相同的使用hash规则存储到一个分区上,然后再进行汇总相加操作
特性5,就近读取,这张图暂时没有体现出来,对于Spark来说,只要有可能,它就会确保就近读取。

总结

如何正确理解RDD?
弹性分布式数据集,分布式计算的实现载体(数据抽象)

RDD五大特点?
1、分区存储
2、作用方法会作用在每一个RDD上
3、RDD有依赖关系
4、key-value型RDD可以有分区器(可选)
5、RDD在构建的时候会尽量靠近数据所在位置(可选)

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

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

相关文章

分享77个NET源码,总有一款适合您

NET源码 分享77个NET源码,总有一款适合您 NET源码下载链接:https://pan.baidu.com/s/1vhXwExVAye5YrB77Vxif8Q?pwdzktx 提取码:zktx 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...&#xf…

Html 3D旋转相册制作

程序示例精选 Html 3D旋转相册制作 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Html 3D旋转相册制作>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习…

zabbix监控主机

zabbix官网 zabbix分为zabbix server&#xff08;zabbix服务端&#xff0c;用来展示监控的&#xff09;和zabbix-agent&#xff08;zabbix客户端用来收集数据的&#xff09; zabbix-agent客户端有两种工作模式&#xff0c;被动模式&#xff08;由zabbix服务来采集数据&#xff…

二十二、Kubernetes中Pod调度第四篇污点(容忍)调度详解、实例

1、概述 在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到达某…

魔方爱好者快来康康,困难的平面魔方来了!

前言和效果图我今天看到一个网站&#xff0c;就是关于魔方的&#xff0c;里面二阶魔方引起了我的兴趣。https://rubiks-cube-solver.com/2x2/进去后你们可以看到&#xff0c;二阶魔方的平面展开图&#xff0c;复原也更加困难。虽然是英文的&#xff0c;但我还是玩得不亦乐乎。好…

查看GPU使用情况和设置CUDA_VISIBLE_DEVICES

文章目录一、简介二、查看GPU状态和信息三、使用3.1临时设置&#xff08;临时设置方法一定要在第一次使用 cuda 之前进行设置&#xff09;3.2python 运行时设置3.3永久设置四、参考资料一、简介 服务器中有多个GPU&#xff0c;选择特定的GPU运行程序可在程序运行命令前使用&am…

企业舆情监控排查什么,TOOM讲解企业舆情监控工作方案?

互联网时代&#xff0c;企业舆情发生因素很多&#xff0c;如果不能及时监控解决&#xff0c;就会引发无限舆情发展&#xff0c;进而影响到企业品牌声誉&#xff0c;引发企业信用危机&#xff0c;所以就需要做好企业舆情监控&#xff0c;接下来我们简单了解企业舆情监控排查什么…

CMMI的五个级别及其特征简述

CMMI 一共分五个级别&#xff0c;一级最低&#xff0c;五级最高&#xff0c;一般企业初次认证CMMI从三级开始。 1、CMMI一级&#xff0c;完成级。在完成级水平上&#xff0c;企业对项目的目标与要做的努力很清晰。项目的目标得以实现。一般来说&#xff0c;公司的初始阶段就…

【C进阶】指针笔试题汇总

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 指针笔试题前言一、题1&#xff08;一&#xff09;题目&#xff08;二&#xff09;答案及解析&#…

【Python】函数——模块与函数的导入

概述 为了方便使用函数&#xff0c;我们可以将函数存储在称为模块的独立文件中&#xff0c;再将模块导入到主程序中&#xff0c;导入一个模块需要使用import语句。 导入整个模块 模块是扩展名为.py的文件 1、导入某个模块 语法为&#xff1a; import module_name 2、导入…

[oeasy]python0043_八进制_oct_octal_october_octave

八进制(oct) 回忆上次内容 什么是 转义&#xff1f; 转义转义 转化含义\ 是 转义字符\n、\r是 转义序列 还有什么 转义序列 吗&#xff1f; \a是 响铃\b 退格键\t 水平制表符 tab键\v、\f 实现喂纸不回车 通过 16进制数值 转义 \xhh输出 (hh)16进制对应的ascii字符 如果我们不…

Portainer使用docker compose搭建nacos并初始化MySQL、Portainer stack搭建nacos并初始化MySQL

Portainer使用docker compose搭建nacos初始化MySQL、Portainer stack搭建nacos初始化MySQL新建stack(堆栈)添加stack(堆栈)名称添加docker-compose规则配置环境变量上传初始化sql文件找初始化sql文件nacos初始化mysql-schema.sql文件内容上传sql文件到初始化挂载目录部署stack(…

打印机不打印故障简单排除方法

日常工作中经常会遇到打印机不能打印的情况&#xff0c;那么又没有专业的技术人员在场帮忙的情况下我们也可以自己动手简单的处理一下故障&#xff0c;可以尝试以下的方法进行简单的故障排除&#xff1b; 一、使打印机处于联机状态&#xff0c;如果打印机没有处于联机状态&…

医疗影像工具LEADTOOLS 入门教程: 检测和提取 MICR - 控制台 C#

LEADTOOLS是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#x…

基于STM32或STC的手势控制MP3语音播放器的设计

一. 系统设计框图 区别于传统设计中的按键开关控制&#xff0c;本设计可以实现通过手势控制MP3播放器。采用STM32或STC15单片机和PAJ7620手势模块&#xff0c;能够识别九种手势&#xff0c;分别为上下左右前后&#xff0c;顺时针&#xff0c;逆时针&#xff0c;挥动。在本设计…

SpringBoot视图解析与模板引擎

目录 1、视图解析 1、视图解析原理流程 2、模板引擎-Thymeleaf 1、thymeleaf简介 2、基本语法 3、设置属性值-th:attr 4、迭代 5、条件运算 6、属性优先级 3、thymeleaf使用 1、引入Starter 2、自动配置好了thymeleaf 3、页面开发 4、构建后台管理系统 1、项目…

Java基础03——数组

Java基础03——数组一、数组介绍二、数组的定义与静态初始化1. 定义数组2. 数组静态初始化三、数组元素访问1. 数组的地址值2. 数组访问四、数组遍历五、数组动态初始化六、数组常见问题1. 索引越界异常七、数组常见操作1. 求最值2. 求和3. 交换数据4. 打乱数据八、数组内存图九…

java企业人事管理系统企业工资考勤系统

简介 Java基于ssm开发的企业人事考勤工资系统&#xff0c;员工可以打卡、请假。系统根据员工的打卡情况自动计算工资&#xff08;全勤、请假、旷工、加班、迟到、早退等计算出最终实发工资&#xff09;&#xff0c;员工还可以查看自己的考勤记录工资具体组成等。升级版加了部长…

Linux——信号知识归纳(中)

目录 一.信号与硬件异常 二.阻塞信号和信号结构 &#xff08;一&#xff09;.信号状态 &#xff08;二&#xff09;.信号结构 ①pending表 ②block表 ③handler表 &#xff08;三&#xff09;.信号处理过程 &#xff08;四&#xff09;.阻塞与忽略的区别 &#xff08…

Linux 中断子系统(二):GIC 中断控制器

GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核(STM32)中的 NVIC。 GIC:Generic Interrupt Controller,通用中断控制器 NVIC:Nested Vectored. Interrupt Controller,嵌套向量中断控制器目前 GIC 有 4 个版本:V1 ~ V4,V1 是最老的版本,已…