Spark(三)Spark Core(二)

news/2024/9/20 14:55:05

RDD详解

RDD持久化/缓存

  • 某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的被使用到,那么可以将这些RDD进行持久化/缓存
val rdd1 = sc.textFile("hdfs://node01:8020/words.txt")
val rdd2 = rdd1.flatMap(x=>x.split(" ")).map((_,1)).reduceByKey(_+_)
rdd2.cache //缓存/持久化
rdd2.sortBy(_._2,false).collect//触发action,会去读取HDFS的文件,rdd2会真正执行持久化
rdd2.sortBy(_._2,false).collect//触发action,会去读缓存中的数据,执行速度会比之前快,因为rdd2已经持久化到内存中了
  • 创建了一个RDD,从HDFS上指定的路径"hdfs://node01:8020/words.txt"读取文本文件,每行文本都是RDD中的一个元素
  • flatMap(x=>x.split(" ")):将每行文本拆分成单词,使用空格作为分隔符
  • map((_,1)):对于每个单词,创建一个键值对,键是单词本身,值是1
  • reduceByKey(+):对每个键(单词)的值进行求和,这样每个单词的计数就计算出来了
  • sortBy(_._2,false):对RDD中的元素按照它们的值(即单词计数)进行排序,_._2指的是元组的第二个元素,false参数表示降序排序
  • collect:这是一个行动操作,它会触发实际的计算,并将结果作为数组返回给驱动程序

persist方法和cache方法

  • RDD通过persist或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用

存储级别

  • 默认的存储级别都是仅在内存存储一份,Spark的存储级别还有好多种,存储级别在object StorageLevel中定义的
持久化级别 说明
MORY_ONLY(默认) 将RDD以非序列化的Java对象存储在JVM中,如果没有足够的内存存储RDD,则某些分区将不会被缓存,每次需要时都会重新计算,这是默认级别
MORY_AND_DISK(开发中可以使用这个) 将RDD以非序列化的Java对象存储在JVM中,如果数据在内存中放不下,则溢写到磁盘上,需要时则会从磁盘上读取
MEMORY_ONLY_SER(Java and Scala) 将RDD以序列化的Java对象(每个分区一个字节数组)的方式存储,这通常比非序列化对象(deserialized objects)更具空间效率,特别是在使用快速序列化的情况下,但是这种方式读取数据会消耗更多的CPU
MEMORY_AND_DISK_SER(Java and Scala) 与MEMORY_ONLY_SER类似,但如果数据在内存中放不下,则溢写到磁盘上,而不是每次需要重新计算它们
DISK_ONLY 将RDD分区存储在磁盘上
MEMORY_ONLY_2, MEMORY_AND_DISK_2等 与上面的储存级别相同,只不过将持久化数据存为两份,备份每个分区存储在两个集群节点上
OFF_HEAP(实验中) 与MEMORY_ONLY_SER类似,但将数据存储在堆外内存中(即不是直接存储在JVM内存中)

RDD容错机制Checkpoint

  • Checkpoint的产生就是为了更加可靠的数据持久化,在Checkpoint的时候一般把数据放在在HDFS上,这就天然的借助了HDFS天生的高容错、高可靠来实现数据最大程度上的安全,实现了RDD的容错和高可用
SparkContext.setCheckpointDir("目录") //HDFS的目录RDD.checkpoint
  • 开发中如何保证数据的安全性性及读取效率:可以对频繁使用且重要的数据,先做缓存/持久化,再做checkpint操作

RDD的依赖关系

  • RDD有两种依赖,分别为宽依赖(wide dependency/shuffle dependency)和窄依赖(narrow dependency)

窄依赖

  • 父RDD的一个分区只会被子RDD的一个分区依赖
  • 窄依赖的多个分区可以并行计算
  • 窄依赖的一个分区的数据如果丢失只需要重新计算对应的分区的数据就可以了

宽依赖

  • 父RDD的一个分区会被子RDD的多个分区依赖(涉及到shuffle)
  • 划分Stage(阶段)的依据:对于宽依赖,必须等到上一阶段计算完成才能计算下一阶段

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

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

相关文章

VSCode配置STM32HAL库开发环境

经常用MDK Keil进行STM32程序开发,但用过jetbrain全家桶等现代IDE后,对keil复古的开发界面以及代码提示不是很喜欢,因此参照网络方法配置了stm32cubemx+vscode+cmake+ninja+gcc的开发环境1. 开发工具下载下载STM32CubeMX:https://www.st.com.cn/zh/development-tools/stm32…

Kubernetes-POD生成 java dump文件

目录背景配置钩子函数验证 背景 在今天的线上业务中,某服务频繁重启。经过排查日志和事件信息,确认是由于 OOM(Out of Memory)导致服务重启。为了方便研发团队定位 OOM 的具体原因,我们决定在 OOM 发生时自动生成内存快照(heap dump),供后续分析使用。 关于 OOM 的详细…

php8:开启opcache和JIT(php 8.3.9)

一,配置文件中的项: opcache.enable=1 opcache.enable_cli=0 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=240 opcache.save_comments=0 opcache.error_log=/data/logs/phplogs/opache_error.log opcache.enable=1 # …

3D游戏开发实战:QML与虚幻引擎

3D游戏开发实战:QML与虚幻引擎 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费1000+个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化…

掌握IT资产发现的三个步骤

IT 资产生态系统非常复杂,因为资产不断变化,包括新增资产、移除过时资产或修改现有资产。在这种动态环境中,IT 资产管理者很难全面查看所有拥有的资产。 根据Gartner的预测,到 2025 年,大约 30% 的关键基础设施组织将面临安全漏洞。而标准普尔全球评级公司最近的报告指出,…

vulnhub - medium_socnet

一台不错的教学靶机medium_socnet 基本信息 kali ip:192.168.157.161 靶机 ip:192.168.157.179 主机发现与端口扫描 nmap -sT --min-rate 10000 -p- 192.168.157.179 nmap -sT -sV -sC -O -p22,5000 192.168.157.179没什么可利用信息,web页面的输入框不会执行命令 目录扫描 …

【Swagger】Swagger入门和一些常见的问题

什么是Swagger swagger(丝袜哥)是当下比较流行的实时接口文档生成工具。前后端分离后,前后端交流比较重要的东西,就是接口文档。离线文档,最大的弊端就是接口程序发生变动的时候,需要回过头来维护上面的内容,确实比较玛法。 实时接口文档可以根据代码来自动生成相应的接口…

python--多态

多态:对于父类的一个方法,在不同的子类上有不同体现