1. RDD基本概念

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

1.1 弹性

  • 存储的弹性:内存和磁盘的自动切换

    • 因为内存是有限制的,如果使用的内存超过了一定的阈值,会将部分数据切换到磁盘上
  • 容错的弹性:数据丢失可以自动回复
  • 计算的弹性:计算出错重试机制
  • 分片的弹性:可以根据需求重新分片

1.2 分布式

  • 数据存储在大数据集群的不同节点上

1.3 数据集

  • RDD封装了计算逻辑,并不保存数据

1.4 数据抽象

  • RDD是一个抽象类,具体需要子类来实现

1.5 不可变

  • RDD封装了计算逻辑,是不可以改变的。想要改变只能产生新的RDD,在新的RDD里面封装计算逻辑(装饰器)

1.6 可分区、并行计算

RDD是一个逻辑上虚拟的集合,内部会拆分成多个partition 的 task,分配给executor

2. WordCount为例,看RDD特性

  • RDD的数据处理方式类似于IO流,也有装饰者模式
  • RDD的数据只有在调用collect方法时,才会真正执行业务逻辑的计算操作,前面都是在叠buff
  • 与IO流能暂时缓存一部分数据(缓冲区)不同,RDD中间不缓存任何数据

3. RDD的五大属性

Internally, each RDD is characterized by five main properties:

  • A list of partitions
  • A function for computing each split
  • A list of dependencies on other RDDs
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  • Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

3.1 分区列表

如上图,由于RDD内直接分区了,所以需要分区列表

3.2 计算逻辑 compute

针对该RDD下的所有分区,compute都是一样的

3.3 和其他RDD的依赖关系

3.4 (可选) 分区器

3.5 (可选) executor节点亲和

如下,其实任务发送给上面的

4. RDD执行原理(yarn环境)

4.1 启动Yarn集群环境

4.2 Spark通过申请资源创建调度节点和计算节点

4.3 Spark框架根据需求将计算逻辑根据分区划分成不同的任务。此处会将task放置到 任务池中

4.4 调度节点将任务根据计算节点状态发送到对应的计算节点进行计算

从以上流程可以看出RDD在整个流程中主要用于将逻辑进行封装,并生成Task发送给Executor节点执行计算。

spark (四) RDD概念的更多相关文章

  1. spark实验(四)--RDD编程(1)

    一.实验目的 (1)熟悉 Spark 的 RDD 基本操作及键值对操作: (2)熟悉使用 RDD 编程解决实际具体问题的方法. 二.实验平台 操作系统:centos6.4 Spark 版本:1.5.0 ...

  2. Spark核心—RDD初探

    本文目的     最近在使用Spark进行数据清理的相关工作,初次使用Spark时,遇到了一些挑(da)战(ken).感觉需要记录点什么,才对得起自己.下面的内容主要是关于Spark核心-RDD的相关 ...

  3. 关于Spark中RDD的设计的一些分析

    RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念. 对于RDD的原理性的知识,可以参阅Resilient Distributed Dat ...

  4. RDD概念、特性、缓存策略与容错

    一.RDD概念与特性 1. RDD的概念 RDD(Resilient Distributed Dataset),是指弹性分布式数据集.数据集:Spark中的编程是基于RDD的,将原始数据加载到内存变成 ...

  5. spark中RDD的转化操作和行动操作

    本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...

  6. [转]Spark学习之路 (三)Spark之RDD

    Spark学习之路 (三)Spark之RDD   https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...

  7. Spark学习之路 (三)Spark之RDD

    一.RDD的概述 1.1 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素 ...

  8. Spark系列-核心概念

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...

  9. Spark Streaming核心概念与编程

    Spark Streaming核心概念与编程 1. 核心概念 StreamingContext Create StreamingContext import org.apache.spark._ im ...

  10. Spark中RDD的常用操作(Python)

    弹性分布式数据集(RDD) Spark是以RDD概念为中心运行的.RDD是一个容错的.可以被并行操作的元素集合.创建一个RDD有两个方法:在你的驱动程序中并行化一个已经存在的集合:从外部存储系统中引用 ...

随机推荐

  1. Kubernetes CNI 插件选型和应用场景探讨

    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes.KubeSphere.KubeKey 等. 本文介绍容器环境常见网络应用场景及对应场景的 ...

  2. .NET 开源扁平化、美观的 C/S 控件库

    前言 给大家推荐一个优秀的控件集,它基于 .NET Framework 4.0,采用纯原生开发,不包含任何第三方插件或类库. 该控件集涵盖了常用的窗体和控件,同时还包括工业工具和类 Web 控件.使用 ...

  3. 局部加权回归(Lowess)

    代码示例:(源自:https://blog.csdn.net/weixin_71158509/article/details/136060826) import numpy as np import ...

  4. python之gevent

    gevent 是一个基于协程的 Python 网络库,它使用 Greenlet 库提供了一种高效的协程实现. 协程是一种轻量级的线程,允许并发执行,但没有真正的并行性.协程可 以在遇到 I/O 操作时 ...

  5. 21stUESTC

    数矩形 平面上有 \(n\) 个点,这 \(n\) 个点两两不重合.问这 \(n\) 个点可以组成多少个矩形 请注意:矩形的边不必平行于坐标轴. \(4 ≤ n ≤ 1000\) 保证这些点两两不重合 ...

  6. Mybatis【9】-- Mybatis占位符#{}和拼接符${}有什么区别?

    代码直接放在Github仓库[https://github.com/Damaer/Mybatis-Learning ],可直接运行,就不占篇幅了. 目录 1.#{}占位符 2.${}拼接符 3.#{} ...

  7. .Net知识技能大全

    .Net知识技能大全 更多请见https://www.dotnetshare.com C#常见运算符 一元运算符(+.-.!.~.++.--) 算术运算符(*./.%.+. – ) 移位运算符(< ...

  8. Kubernetes集群巡检内容

    1.概述 Kubernetes 集群巡检是一种监测和评估底层系统运行状况的重要手段,旨在快速发现系统中存在的潜在风险并提供修复建议.通过对 Kubernetes(K8s)集群进行定期巡检,可以有效保障 ...

  9. mysql基础之增删改查

    标签: mysql 增加数据 -- 增加数据 use myblog; insert into users(username, `password`, realname) values('zhangsa ...

  10. 【Amadeus原创】wordpress批量更新图片路径的方法

    连上wordpress数据库,怼一句: UPDATE wp_posts SET post_content = REPLACE( post_content, '旧域名', '新域名' );