首页 > 其他分享 >Spark学习(二):RDD详解

Spark学习(二):RDD详解

时间:2024-09-27 11:13:34浏览次数:1  
标签:分区 容错 RDD 详解 计算 Spark 数据

Spark学习(二):RDD详解

RDD API

一般来说有三种创建RDD的方式

  • 由外部存储系统的数据集创建(比如本地的文件系统,同时兼容所有Hadoop支持的数据集):sc.textFile
  • 通过已有的RDD通过算子转换生成新的RDD:rdd1.flatMap(_.split(" "))
  • 通过一个Scala集合创建:sc.parallelize()

RDD原理

MapReduce框架采用了一种非循环式的数据流模型,把中间结果写入到HDFS(GFS的工业界实现),带来了大量的数据复制、磁盘IO和序列化的开销,且只能支持map和reduce两种特定的计算。RDD就是为了解决这些问题而产生的

RDD的全称叫:Resilient Distributed Dataset,翻译过来就是弹性 分布式 数据集,它是一个数据集的表示,不仅表示了数据集,也同时表示了这个数据集从哪来,以及如何计算,主要包含了以下几个属性:

表示数据集位置:分区列表,分区函数,最佳位置列表

  • 分区列表:一个RDD有很多分区,每个分区内部包含了该RDD的部分数据,在Spark中任务以task线程的方式运行,一个分区就对应着一个task线程,这个重要属性保障了分布式运算的实现

    用户可以在创建RDD时指定RDD的分区个数,比如var rdd = sc.textFile("/word.txt", 8)

  • 分区函数:当数据为KV类型数据时,可以通过设定分区函数来自定义数据的分区(可选项)

    当前Spark实现了两种类型的分区函数:基于哈希的HashPartitioner,基于范围的RangePartitioner

  • 最佳位置列表:存储每个分区的优先位置,涉及到数据的本地性、数据块位置最优,Spark任务在调度的时候会优先考虑存有数据的节点开始计算任务,减少数据的网络传输,来提高计算效率

表示数据集来源:计算函数,依赖关系

  • 计算函数:在Spark中RDD的运算是以分区为单位的,每个RDD都会实现compute计算函数来对每个分区进行计算
  • 依赖关系:一个RDD往往会依赖多个RDD,这里涉及到RDD与RDD之间的依赖关系,Spark任务的容错机制就是根据这个特性实现的

RDD并不实际存储真正要计算的数据,而是记录的数据的位置,数据的转换关系;同时,所有的RDD转换都是一个惰性求值的过程,只有当发生一个要求返回结果给driver的action动作时,才会真正地运行

使用惰性求值/延迟执行的优点:在Action时形成DAG进行stage的划分和并行优化,提高效率

RDD持久化/缓存

某些RDD的计算或转换可能比较耗时,如果这些RDD后续会被频繁地使用到,可以考虑将这些RDD进行持久化/缓存,使用方式如:rdd.cache,在调用cache方法之后,触发了后面的action时,该RDD就会被缓存在计算节点的内存中,供后面重用

缓存的级别有很多,默认只存储在内存当中,在开发中通常使用memory_and_disk

弊端:虽然持久化/缓存可以把数据放在内存当中,速度快但可靠性较差,即使选择将其持久化到磁盘上也可能遭遇磁盘损坏的情况

改进:想要获得更可靠的数据持久化效果,可以考虑使用checkpoint,将数据放到HDFS上,天然地借助HDFS的天生高容错、高可靠来实现数据最大程度的安全,实现RDD的容错和高可用,使用方法如下:

sc.setCheckpointDir("HDFS目录")
RDD.checkpoint

RDD对于Spark容错的支持

一般来说,支持容错有两种常见的实现方式:数据复制或日志记录,对于以数据为中心的系统来说,这两种方式都非常昂贵,因为它需要跨集群网络拷贝大量数据,涉及到大量的耗时操作

而RDD是天然支持容错的:它自身是一个不变的只读数据集,可以通过依赖关系、计算函数等记住构建它的操作图,因此当执行任务的worker执行失败时,完全可以通过操作图来获得之前执行的操作,进行重新计算。这种方式下无需采用复制的方式支持容错,很好地降低了跨网络的数据传输成本

不过,在某些场景下,Spark 也需要利用记录日志的方式来支持容错。例如,在 Spark Streaming 中,针对数据进行 update 操作,或者调用 Streaming 提供的 window 操作时,就需要恢复执行过程的中间状态。此时,需要通过 Spark提供的 checkpoint 机制,以支持操作能够从 checkpoint 得到恢复。

RDD 算子

Transformation:转换操作,返回一个新的RDD

Action:动作操作,无返回值或返回非RDD数据、

标签:分区,容错,RDD,详解,计算,Spark,数据
From: https://www.cnblogs.com/pinoky/p/18435294

相关文章

  • Docker镜像、Spark支持多表...Apache SeaTunnel 2.3.8版本将带来的惊喜
    ApacheSeaTunnel2.3.8版本即将于大家见面,近日,ApacheSeaTunnelPMCMember范佳在社区的交流会上为大家提前透露了关于这个新版本即将进行的功能与特性更新概况,详细内容如下:SeaTunnel简介SeaTunnel是一个高性能的开源分布式数据集成系统,支持各种数据源的实时流式和离线批处......
  • (图文并茂,权威最详细)Wireshark抓包分析 TCP三次握手/四次挥手详解
    本文结合wireshark抓包,对TCP协议的三次握手和四次挥手进行详细的讲解。大家要认真看完,这可能是全网讲得最详细的文章了。01TCP/IP协议族TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能。包含以下四个层次:1.链路层,也称作数据链路层或者网络接口层,......
  • 强化学习详解:理论基础与核心算法解析
    本文详细介绍了强化学习的基础知识和基本算法,包括动态规划、蒙特卡洛方法和时序差分学习,解析了其核心概念、算法步骤及实现细节。关注作者,复旦AI博士,分享AI领域全维度知识与研究。拥有10+年AI领域研究经验、复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心......
  • ISSI(芯成)—IS25WP512M-JLLA3 FLASH芯片详解
    写在前面本系列文章主要讲解ISSI(芯成)—IS25WP512M-JLLA3FLASH芯片的相关知识,希望能帮助更多的同学认识和了解ISSI(芯成)—IS25WP512M-JLLA3FLASH芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)此次架构中IS25WP512M-JLLA3作为FLASH芯片使用,下面将详细介绍此芯片。1.......
  • PasteForm最佳CRUD实践,实际案例PasteTemplate详解之管理前端的代码(二)
    之前的文章说了,使用反射和ABPvNext的Dto实现用后端控制前端以实现最佳CRUD实践!相信看过一的已经了解了这个PasteForm是如何实现的了,本文来看下具体如何实现的表格页面的实现打开pasteform/index.html页面之后,先会向API请求当前的path的数据模板_apiget(`/api/app/${_class......
  • 嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)
    前言:本文是基于B站草履虫编写的平衡车相关内容,包括模块和基础知识,结合代码进行讲解,将知识进行汇总(由于本篇内容较长,请结合目录使用)注:基于开源精神,本文仅供学习参考目录前言:本文是基于B站草履虫编写的平衡车相关内容,包括模块和基础知识,结合代码进行讲解,将知识进行汇总......
  • BigDecimal 详解与实战
    BigDecimal详解与实战JavaBigDecimal完整指南引言什么是`BigDecimal`?创建`BigDecimal`对象常用方法示例代码注意事项实际运用金融计算示例代码:商业应用示例代码:科学计算示例代码:数据汇总和统计示例代码:为什么选择`BigDecimal`?JavaBigDecimal完整指南......
  • TikTok直播网络怎么选?SD-WAN、直播专线、软路由、节点详解
    随着TikTok全球用户的爆发式增长,越来越多的个人和品牌方将直播作为与观众互动、推广产品的重要方式。直播的成功不仅依赖于优质的内容,稳定的网络连接也是至关重要的核心要素之一。在选择TikTok直播的网络方案时,市面上常见的技术包括SD-WAN、直播专线、软路由、和节点。接下来,我......
  • DC-2通关详解
    DC-2与DC-1非常像,DC-2是另一个专门建立的易受攻击的实验室,目的是获得渗透测试领域的经验。与最初的DC-1一样,它是为初学者设计的。必须具备Linux技能并熟悉Linux命令行,还必须具有使用基本渗透测试工具的经验。DC-2一样有五个flag。渗透靶场目标是确定目标靶场使用ifconfig来......
  • 打造同城O2O平台:外卖跑腿APP的架构与功能设计详解
    今天,小编将于大家共同讨论外卖跑腿APP的架构设计及其核心功能,旨在为开发者提供一份详尽的参考。 一、外卖跑腿APP的架构设计1.整体架构概述通常包括前端、后端和数据库。2.前端设计用户端提供直观的界面,方便用户下单、查询订单状态、进行支付等操作;骑手端则需关注接单、导航、订单......