我的编程空间,编程开发者的网络收藏夹
学习永远不晚

spark计算模型RDD

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

spark计算模型RDD

spark计算模型RDD

RDD介绍

1.RDD概念以及特性

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将数据缓存在内存中,后续的查询能够重用这些数据,这极大地提升了查询速度。(A Resilient Distributed Dataset)弹性分布式数据集合。并且是spark最基本的编程抽象,而且RDD是只读、可分区的、可以进行并行计算的一个对象。

  • 数据集:一个数据集合,用于存放数据的。RDD是一个数据容器,用来组织管理数据的。跟Array和List类似,并且都能够进行map、flatMap、filter等等

  • 分布式:RDD中的数据是分布式存储的,可用于分布式计算。RDD的数据是分布存储的,也就是Spark集群中每个节点上只存储了RDD的部分数据。计算同样也是分布式并行计算的

  • 弹性:

    • 存储的弹性:RDD的数据可以在内存和磁盘之间进行自由切换

    • 可靠性的弹性:RDD的在丢失数据的时候能够自动恢复。RDD在计算过程中会出现失败的情况,失败以后会进行一定次数的重试(4次)

    • 并行度的弹性:RDD的数据分区可以改变,进而增加并行计算的粒度

  • RDD其他特点:

    • RDD的数据是只读,每次操作都会产生新的RDD。安全。

    • RDD中数据可以缓存在内存、磁盘、HDFS之上

1.1RDD弹性

1) 自动进行内存和磁盘数据存储的切换

​ Spark优先把数据放到内存中,如果内存放不下,就会放到磁盘里面,程序进行自动的存储切换

2) 基于血统的高效容错机制

​ 在RDD进行转换和动作的时候,会形成RDD的Lineage依赖链,当某一个RDD失效的时候,可以通过重新计算上游的RDD来重新生成丢失的RDD数据。

3) Task如果失败会自动进行特定次数的重试

​ RDD的计算任务如果运行失败,会自动进行任务的重新计算,默认次数是4次。

4) Stage如果失败会自动进行特定次数的重试

​ 如果Job的某个Stage阶段计算失败,框架也会自动进行任务的重新计算,默认次数也是4次。

5) Checkpoint和Persist可主动或被动触发

​ RDD可以通过Persist持久化将RDD缓存到内存或者磁盘,当再次用到该RDD时直接读取就行。也可以将RDD进行检查点,检查点会将数据存储在HDFS中,该RDD的所有父RDD依赖都会被移除。

6) 数据调度弹性

​ Spark把这个JOB执行模型抽象为通用的有向无环图DAG,可以将多Stage的任务串联或并行执行,调度引擎自动处理Stage的失败以及Task的失败。

7) 数据分片的高度弹性

​ 可以根据业务的特征,动态调整数据分片的个数,提升整体的应用执行效率。

​ RDD是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此,RDD支持丰富的转换操作(如map, join, filter, groupBy等),通过这种转换操作,新的RDD则包含了如何从其他RDDs衍生所必需的信息,所以说RDDs之间是有依赖关系的。基于RDDs之间的依赖,RDDs会形成一个有向无环图DAG,该DAG描述了整个流式计算的流程,实际执行的时候,RDD是通过血缘关系(Lineage)一气呵成的,即使出现数据分区丢失,也可以通过血缘关系重建分区,总结起来,基于RDD的流式计算任务可描述为:从稳定的物理存储(如分布式文件系统)中加载记录,记录被传入由一组确定性操作构成的DAG,然后写回稳定存储(HDFS或磁盘)。另外RDD还可以将数据集缓存到内存中,使得在多个操作之间可以重用数据集,基于这个特点可以很方便地构建迭代型应用(图计算、机器学习等)或者交互式数据分析应用。可以说Spark最初也就是实现RDD的一个分布式系统,后面通过不断发展壮大成为现在较为完善的大数据生态系统,简单来讲,Spark-RDD的关系类似于Hadoop-MapReduce关系。

1.2RDD的五大属性

1) 一组分片(Partition),即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。

如果文件的block个数 <=2 那么 sc.textFile(“file:///wordcount.txt”)分区个数为2

如果文件的block块个数 >2 那么 sc.textFile(“file:///wordcount.txt”)分区的个数等于block块的个数

2) 一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。RDD的每一个算子操作比如map 都会通过compute方法作用在每个分区之上

3) RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。每一个RDD都有其依赖列表RDD的依赖关系 都是存在一个序列集合中,作用:容错 以及构建起血统机制

4) 一个Partitioner,即RDD的分片函数。当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函数不但决定了RDD本身的分片数量,也决定了parent RDD Shuffle输出时的分片数量。

5) 一个列表,存取每个Partition的优先位置(preferred location)。对于一个HDFS文件来说,这个列表保存的就是每个Partition所在的块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。

 a list of preferred locations to compute each split on (e.g. block locations for
  *    an HDFS file)
  Spark在读取hdfs文件的是,hdfs文件每一个block默认有多个备份,spark会获取每一个block块以及其备份的位置信息构建成列表,在进行计算的时候,spark会在位置列表中选取一个最佳位置进行任务分配。 移动数据不如移动计算的原则。
       移动数据不如移动计算的原则最高境界:数据在当前运行程序的进程之中
  RDD是如何确定优先位置?
      getPreferredLocations(split: Partition): Seq[String] 
  通过以上方法确定计算的最佳位置。
  RDD的数据本地化:
      5种

2.RDD的构建方式

3种构建方式

  • 根据以后数据集合构建RDD

    • val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8))

    • val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8))

  • 根据外部文件 可以是本地文件也可是HDFS上文件

    • sc.textFile(filePath)

  • 根据以后RDD创建新的RDD 需要经过算子操作

    • val newRDD=lineRDD.flatMap(function)

3.RDD的算子操作

RDD的算子分为两类

  • 转换算子(Transform算子)

    • 将一个RDD通过转换算子操作以后会构建新的RDD,比如map 、flatMap、reduceByKey

    • 转换算子操作都是直接new新的RDD,此时RDD并没有进行真正的计算。转换算子只是对数据如何计算做了标记。转换算子都是懒加载。

  • 重要算子操作

    • mapPartitions :作用于每个分区之上的

      • mapPartitions 和map区别:

        • mapPartitions 相当于partition批量操作

        • map作用于每一条数据

        • 重要区别:mapPartitions 这个在大量task运行的时候可能会出现内存溢出的情况。小数据量的操作 mapPartitions 要优于map操作

    • groupByKey算子和ReduceByKey算子的区别

      • 1.groupByKey 返回值:key->集合 ReduceByKey返回值: key-》值

      • 2.ReduceByKey操作会在本地进行初步merge操作,能够减少网络数据的传输

    • coalesce 减少分区数据的算子

      • 该算子可以进行shuffle也可以不进shuffle操作, coalesce(numPartitions: Int, shuffle: Boolean = false)

    • repartition 实际上是调用了 coalesce 算子 ,而且 repartition一定会进行shuffle操作,既可以增加也可以减少分区

  • Action算子

    action算子内部都会有一个runJob方法进行提交一个Job任务

  广播变量:

  • 广播变量需要数据传递

    • HTTP协议:基于HTTP协议将数据传递到Executor。Executor会Driver端申请下载(已经被废弃)

    • torrent协议:默认的方式。 Driver下载到Executor上,然后Executor会再次数据源,将数据传递到下一个需要数据Executor之上。参考 (TorrentBroadcast类)

4.RDD的依赖关系

RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。

  • RDD的依赖类型

    • 窄依赖:父RDD中一个partition最多被子RDD中的一个partition所依赖,这种依赖关系就是窄依赖

    • 窄依赖算子:map 、filter 、union 、flatMap等

    • 宽依赖:父RDD中一个partition被子RDD中的多个partition所依赖,这种依赖关系就是宽依赖

    • 宽依赖算子:groupByKey、reduceByKey。凡是By基本上都是宽依赖

    一对一或者多对==一:窄依赖==

    一对多或者多对==多:宽依赖==

  • 宽窄依赖算子的判断依据是转换算子是否会产生shuffle操作,如果有shuffle操作则是宽依赖,否则是窄依赖

  • join既是宽依赖算子也是窄依赖算子 (在一个shuffle操作之后,在使用Join的时候,此时join就是窄依赖)

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

spark计算模型RDD

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

spark计算模型RDD

RDD介绍1.RDD概念以及特性RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度
spark计算模型RDD
2021-01-17

Spark RDD常用算子是什么类型的

小编给大家分享一下Spark RDD常用算子是什么类型的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spark RDD常用算子:Value类型Spark之所以比
2023-06-27

Spark Streaming在实际应用场景中的两种计算模型

欢迎各位阅读本篇,数据:在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。本篇文章讲述了Spark Streaming场景应用&计算模型及监控。
Spark Streaming在实际应用场景中的两种计算模型
2024-04-23

阿里云函数计算服务ECS一种新型云计算应用模型

在云计算领域,随着技术的发展和需求的增长,越来越多的企业和用户开始关注云计算服务。而阿里云函数计算服务ECS,则是一种新型云计算应用模型,它为用户提供了更灵活、更高效的服务体验。在本文中,我们将详细介绍ECS的特点、优势以及使用方法。一、阿里云函数计算服务ECS的特点弹性扩展:ECS可以根据需求自动扩展资源,满足
阿里云函数计算服务ECS一种新型云计算应用模型
2023-12-15

大数据Hadoop之——计算引擎Spark

目录一、概述1)Spark特点2)Spark适用场景二、Spark核心组件三、Spark专业术语详解1)Application:Spark应用程序2)Driver:驱动程序3)Cluster Manager:资源管理器4)Executor:执行器5)Worke
大数据Hadoop之——计算引擎Spark
2016-06-11

Spark 两种方法计算分组取Top N

Spark 分组取Top N运算大数据处理中,对数据分组后,取TopN是非常常见的运算。下面我们以一个例子来展示spark如何进行分组取Top的运算。1、RDD方法分组取TopNfrom pyspark import SparkContextsc = Spar
Spark 两种方法计算分组取Top N
2020-10-09

[离线计算-Spark|Hive] HDFS小文件处理

本文主要介绍小文件的处理方法思路,以及通过阅读源码和相关资料学习hudi 如何在写入时智能的处理小文件问题新思路.Hudi利用spark 自定义分区的机制优化记录分配到不同文件的能力,达到小文件的合并处理. 背景HDFS 小文件过多会对hadoop 扩展
[离线计算-Spark|Hive]  HDFS小文件处理
2021-05-27

如何解析Apache Spark 统一内存管理模型

今天就跟大家聊聊有关如何解析Apache Spark 统一内存管理模型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Apache Spark 统一内存管理模型详解下面将对 Spark
2023-06-02

pytorch怎么获得模型的计算量和参数量

这篇文章给大家分享的是有关pytorch怎么获得模型的计算量和参数量的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法1 自带pytorch自带方法,计算模型参数总量total = sum([param.nele
2023-06-15

怎么理解spark的计算器与广播变量

这篇文章给大家介绍怎么理解spark的计算器与广播变量,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一.计算器1.官网2.解释计数器只支持加,计算器字task里面3.测试4.结果截图WEBUI4.应用场景数据很多有的数
2023-06-02

阿里云原生服务器一种新型云计算服务器模型

阿里云原生服务器是一种新型的云计算服务器模型,旨在提供高效、灵活、可靠的计算资源,以满足各类应用场景的需求。本文将详细介绍阿里云原生服务器的特性、优势以及如何使用。阿里云原生服务器的特性:高效:阿里云原生服务器采用先进的处理器和存储技术,能够提供高效的计算和存储性能。灵活:阿里云原生服务器支持多种操作系统和应用程
阿里云原生服务器一种新型云计算服务器模型
2023-12-14

编程热搜

目录