Spark core 之 RDD运行机制深层理解

Spark core

RDD: Resilient Distributed Dataset(弹性分布式数据集),Spark计算的基石,为用户屏蔽了底层对数

据的复杂抽象和处理,为用户提供了一组方便的数据转换与求值方法。

特性:

不可变:RDD创建以后就不可变了

可分区:整个RDD的真实数据其实是分散在spark的很多的worker上面的,每个worker可能会存了这

些数据的一部分,这个叫分片也叫分区,那这个RDD对象它建的对象实例是什么呢?它建的这个对象

实例只不过就是把这些分区的地址跟这些数据的大小,这些数据在哪儿等等这些相关的一些映射关系

记录下来了,这个就是RDD的实例里边应该有什么东西。还有跟这个spark环境里面的一些什么调度

组件啊之类的。

弹性

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

容错的弹性:数据丢失可以自动恢复

计算的弹性:计算出错重试机制

分片的弹性:根据需要重新分片

RDD都做了什么:
在这里插入图片描述

RDD的创建=>RDD的转换=>RDD的缓存=>RDD的行动=>RDD的输出

原生数据空间:可能是你的笔记本,也可能是你的Linux操作系统,这个是不在spark里面的。

Spark RDD空间:这个也就是当数据进入spark的计算环境之后,你就进入了这个空间。

WordCount的计算流程:
在这里插入图片描述

总结:

1、RDD是整个Spark的计算基石。是分布式数据的抽象,为用户屏蔽了底层复杂的计算和映射环境

(1)RDD是不可变的,如果需要在一个RDD上进行转换操作,则会生成一个新的RDD

(2)RDD是分区的,RDD里面的具体数据是分布在多台机器上的Executor里面的。堆内存和堆外内

存 + 磁盘。

(3)RDD是弹性的:

a 存储:Spark会根据用户的配置或者当前Spark的应用运行情况去自动将RDD的数据缓存到内存或

者磁盘。他是一个对用户不可见的封装的功能。

b 容错:当你的RDD数据被删除或者丢失的时候,可以通过血统或者检查点机制恢复数据。这个也

是用户透明的。

c 计算:计算是分层的,有 应用—>Job—>Stage—>TaskSet—>Task 每一层都有对应的计算的保障

与重复机制。保障你的计算不会由于一些突发因素而终止。

d 分片:你可以根据业务需求或者一些算子来重新调整RDD中的数据分布。

2、Spark Core干了什么东西,其实就是在操作RDD

RDD的创建--->RDD的转换--->RDD的缓存--->RDD的行动--->RDD的输出

RDD怎么创建?

创建RDD的方式大概可以分为三种:

1、 可以从一个scala集合里面创建

有两种方式:parallelizemakeRDD

(1)sc.parallelize(seq) 把seq这个数据并行化分片到节点
在这里插入图片描述
(2) sc.makeRDD 把seq这个数据并行化分片到节点,它的实现就是parallelize

(3) sc.makeRDD(seq[T,seq]) 这种方式可以指定RDD的存放位置
在这里插入图片描述
2、 从外部存储创建RDD:

比如sc.textFile(“path”)

由外部存储系统的数据集创建,包括本地的文件系统,还有所有Hadoop支持的数据集,比如

HDFS、Cassandra、Hbase等

3、 从其他RDD转换过来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值