深入探究Spark -- RDD详解

Spark最基本、最根本的数据抽象

RDD基于内存,提高了迭代式、交互式操作的性能

RDD是只读的,只能通过其他RDD批量操作来创建,提高容错性    另外RDD还具有位置感知性调度和可伸缩性

RDD只支持粗粒度转换,记录Lineage,用于恢复丢失的分区,从物理存储的数据计算出相应的RDD分区

RDD的5个主要属性:

1.一组分片,默认的分片个数等于core数。BlockManager进行分配。

2.一个compute计算分区函数,对迭代器进行复合,以分片为单位

3.RDD之间的依赖关系,使数据丢失时,只对部分分区数据重新计算

4.一个partitioner分片函数,分为基于Hash哈希和Range范围的,只有key-value的RDD才有

5.一个列表,存储partition的优先位置

两种方式创建RDD:

  1. 已存在的集合创建
  2. 外部数据集创建

RDD的转换:

RDD的动作:

RDD的缓存:

也称为持久化,实现了重用,是迭代式算法和交互式查询的关键

通过cache()方法标记为缓存

RDD的检查点:

避免缓存丢失过多带来的计算开销

调用org.apache.spark.rdd.RDD#checkpoint()指定检查点

RDD的依赖关系:

窄依赖和宽依赖

窄依赖:一个parent RDD的partition最多被子RDD的一个partition依赖

宽依赖:多个子RDD的partition依赖同一个parent RDD的partition

窄依赖包括的函数:

map、filter、union,仅仅和已知的partition进行join,都是窄依赖,不会引入昂贵的shuffle,partition互相独立,计算任务可以并行执行

宽依赖包括的函数:

groupByKey、需要parent RDD的所有partition进行join,都属于宽依赖,需要shuffle过程

支持两种shuffle manager,hash和sort

DAG生成:

RDD的依赖关系,生成了逻辑上的DAG

Spark根据宽依赖将DAG划分成不同的stage

RDD的计算:

一系列转换后,最后一个RDD触发动作,生成Job,划分到Task中,提交集群上的计算节点,最终由Executor执行计算

task分为ShuffleMapTask和ResultTask,其中为结果生成的ResultTask被发送到Executor中

缓存的处理:

cacheManager,RDD可更简单从Storage读写。

通过getOrCompute判断是否计算

checkpoint处理:

没有缓存的情况下,判断是否有checkpoint,没有就开始计算

RDD的容错机制:

基于Lineage

stage之间的依赖关系可以认为就是Lineage

Tachyon 两个维度容错,元数据容错(元数据保存到Image文件中,并保存变化到EditLog中),另一个就是Lineage容错机制

最后强调:RDD不需要物化!!

原文地址:https://www.cnblogs.com/kinghey-java-ljx/p/8519012.html

时间: 2024-08-01 15:00:22

深入探究Spark -- RDD详解的相关文章

Spark RDD详解

1.RDD是什么 RDD:Spark的核心概念是RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD的描述 Internally, each RDD is characterized by five main properties: A list of partitions A function for computing each split A list of depe

[Spark]-RDD详解之变量&操作

RDD的操作 1.1 概述    RDD整体包含两大类操作 transformation 从现有中创建一个新的数据集 action 在对数据集做一定程度的计算后将结果返回        以MapReduce来说,Map就是一个transformation ,它是从每个文件块上执行一个方法来抽取转换,最终形成一个新的数据集.而Reduce就是一个action,它在对数据集执行一个函数进行计算后返回一个结果 对于所有的transformation,都是Lazy的,也就是说它不会立即执行,只是单纯的记

Apache Spark源码走读之13 -- hiveql on spark实现详解

欢迎转载,转载请注明出处,徽沪一郎 概要 在新近发布的spark 1.0中新加了sql的模块,更为引人注意的是对hive中的hiveql也提供了良好的支持,作为一个源码分析控,了解一下spark是如何完成对hql的支持是一件非常有趣的事情. Hive简介 Hive的由来 以下部分摘自Hadoop definite guide中的Hive一章 "Hive由Facebook出品,其设计之初目的是让精通SQL技能的分析师能够对Facebook存放在HDFS上的大规模数据集进行分析和查询. Hive大大

spark配置详解

对付看把 到这里格式变化太大了,懒得调整了,这是大概spark1.5版本时候的一些参数默认值,现在2.x会有变化 这些皆可在 spark-default.conf配置,或者部分可在 sparkconf().set设置 应用程序属性 |--------------------------------------------------------------------------------------------| 属性名称                                   

Spark函数详解系列--RDD基本转换

摘要:   RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行操作,一个RDD代表一个分区里的数据集   RDD有两种操作算子:          Transformation(转换):Transformation属于延迟计算,当一个RDD转换成另一个RDD时并没有立即进行转换,仅仅是记住了数据集的逻辑操作          Ation(执行):触发Spark作业的运行,真正触发转换算子的计算 本系列主要讲解Spark中常用的函数操作:  

Spark(六) -- RDD详解

What is RDD? A Resilient Distributed Dataset(RDD),分布式弹性数据集,是Spark上的一个核心抽象 表示用于并行计算的,不可修改的,对数据集合进行分片的数据结构 在Spark上,针对各种各样的计算场景存在着各种各种的RDD,这些RDD拥有一些共同的操作,例如map,filter,persist等,就好像RDDs都是一个总RDD的子类一样,拥有所有RDD的共同特性 同时RDDs也拥有能表达自己特性的操作,例如PairRDDR有groupByKey,j

深入理解spark-rdd详解

1.我们在使用spark计算的时候,操作数据集的感觉很方便是因为spark帮我们封装了一个rdd(弹性分布式数据集Resilient Distributed Dataset): 那么rdd数据本身是如何存储的呢,又是如何调度读取的? spark大部分时候都是在集群上上运行的,那么数据本身一定是也是分布式存储的,数据是由每个Excutor的去管理多个block的,而元数据本身是由driver的blockManageMaster来管理,当每个excutor创建的时候也会创建相对应的数据集管理服务bl

Spark函数详解系列之RDD基本转换

摘要: RDD:弹性分布式数据集,是一种特殊集合 ? 支持多种来源 ? 有容错机制 ? 可以被缓存 ? 支持并行操作. RDD有两种操作算子: Transformation(转换):Transformation属于延迟计算,当一个RDD转换成另一个RDD时并没有立即进行转换,仅仅是记住了数据集的逻辑操作 Action(执行):触发Spark作业的运行,真正触发转换算子的计算 本节所讲函数 1.map(func) 2.flatMap(func) 3.mapPartitions(func) 4.ma

spark的rdd详解1

1,rdd的转换和行动操作 2,创建rdd的2种方式 1,通过hdfs支持的文件系统,没有真正把数据放rdd,只记录了一下元数据 2,通过scala的集合或者数组并行化的创建rdd 3,rdd的5大特点 1,rdd是分区的,可以指定分区数 2,算子的方法都会作用在每个分区 3,rdd之前有一系列的依赖,所有依赖形成DAG图,DAG计算单位是阶段 4,k-v的rdd可以选择分区器,默认的是hash-partitioned 5,会选择最优的位置计算每个分区,避免跨网络传输数据 原文地址:https: