Spark中Partition、Stage、Task、Executor、并行度的各种数量关系 & RDD弹性、分布式、数据集的理解

Spark中各种组件、概念之间具备一定的数量关系,本篇博文主要整理一下这些内容,并且从弹性、分布式、数据集这三个方面来解释RDD的概念。

目录

一、Spark数量关系

1. 分区数 Partition

2. 阶段数量 Stage

3. 任务数量 Task

4. Executor数量

5. 并行度数量

二、RDD的概念剖析

1. 弹性

2. 分布式

3. 数据集


一、Spark数量关系

1. 分区数 Partition

(1)内存数据:

如果指定分区数量,就会使用指定的数量(setMaster("local[*]"));如果没有指定数量,会采取分区算法;

(2)文件数据:

文件源码底层与Hadoop有关,遵循Hadoop文件切片规则。

 

2. 阶段数量 Stage

Stage产生的标志是shuffle依赖(宽依赖),并且一定有一个resultStage阶段;

所以阶段数量 = 1 + shuffle依赖个数。

 

3. 任务数量 Task

map阶段:一个分区Partition对应一个任务Task,分区数决定了任务数量;

reduce阶段:默认情况下,分区数来自于上一个阶段,也可以自行配置,任务数取决于分区数。

 

4. Executor数量

一个worker中可以启动多个Executor;(Yarn模式下Executor在Container中)

启动应用程序时,依据参数total-executor-cores来指定。

 

5. 并行度数量

并行度指所有Executor可以同时执行的Task数,

每个Executor中的一个Core(线程,虚拟核数)同时只能执行一个Task,

所以最大并行度 = Executor数量 * 每个Executor的Core数;

eg:资源配置10个Executor节点,每个节点2个Core,那么同一时间可以并行计算的task数为20,

如果RDD有100个分区,那么需要5轮计算完毕,

如果RDD有2个分区,那么计算时只使用2个Core,其余18个Core空转,浪费资源,

所以Spark调优中会通过增大RDD分区数,增大任务并行度来提高效率。

 

二、RDD的概念剖析

RDD:Resilient Distributed Datasets弹性分布式数据集

它的特点:只读、分区、血缘、缓存、checkpoint

1. 弹性

RDD数据计算基于内存,但是会和文件联合使用,RDD数据的来源和存储可以是内存也可以是文件;

RDD分区是弹性的;

RDD具备容错性:

(1)可以通过RDDs的血缘关系进行回溯;

(2)如果Stage出错,可以通过DAG来重试;如果Task出错,任务也支持重试机制;

(3)Cache(memory不切断血缘、不安全) & CheckPoint(保存到持久化系统中、切断血缘、安全)

 

2. 分布式

RDD数据可以存放在分布式系统中,例如hadoop的HDFS;

另外RDD的数据计算也是分布式的,在多个Worker节点的多个Executor中分布式并行计算;

 

3. 数据集

RDD中存在分区,而分区是一种数据结构,所以RDD可以理解为数据集

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值