spark rdd分区与任务关系

rdd是弹性分布式数据集,分区是对rdd数据的划分。分区之后,job并行度增大。一个分区对应一个任务。
          什么是任务,任务是job的执行逻辑单元。task会在excutor中执行。
          当Spark读取这些文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,一般是将若干个Block合并成一个输入分片,称为InputSplit,注意InputSplit不能跨越文件。
随后将为这些输入分片生成具体的Task。InputSplit与Task是一一对应的关系。
随后这些具体的Task每个都会被分配到集群上的某个节点的某个Executor去执行。
每个节点可以起一个或多个Executor。
每个Executor由若干core组成,每个Executor的每个core一次只能执行一个Task。
每个Task执行的结果就是生成了目标RDD的一个partiton。

注意: 这里的core是虚拟的core而不是机器的物理CPU核,可以理解为就是Executor的一个工作线程。

而 Task被执行的并发度 = Executor数目 * 每个Executor核数。

至于partition的数目:
对于数据读入阶段,例如sc.textFile,输入文件被划分为多少InputSplit就会需要多少初始Task。
在Map阶段partition数目保持不变。
在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,例如repartition操作会聚合成指定分区数,还有一些算子是可配置的。
RDD在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的的task数目。
申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的task。
比如的RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个两2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。
如果计算资源不变,你有101个task的话,就需要6个轮次,在最后一轮中,只有一个task在执行,其余核都在空转。
如果资源不变,你的RDD只有2个分区,那么同一时刻只有2个task运行,其余18个核空转,造成资源浪费。这就是在spark调优中,增大RDD分区数目,增大任务并行度的做法。

RDD分区的作用
一个HDFS文件的RDD将文件的每个文件块表示为一个分区,并且知道每个文件块的位置信息。这些对应着数据块的分区分布到集群的节点中,因此,分区的多少涉及对这个RDD进行并行计算的粒度。首先,分区是一个逻辑概念, 变换前后的新旧分区在物理上可能是同一块内存或者是存储。

需要注意的是,如果没有指定分区数将使用默认值,而默认值是该程序所分配到CPU核数,如果是从HDFS文件创建,默认为文件的数据块数。

移动计算而不移动数据
在Spark形成任务有向无环图时,会尽可能地把计算分配到靠近数据的位置,减少数据的网络传输。当RDD分区被缓存, 则计算应该被发送到缓存分区所在的节点进行,另外,RDD的血统也会影响子RDD的位置,回溯RDD的血统,直到找到具有首选位置属性的父RDD,并据此决定子RDD的位置。

RDD的依赖关系
RDD的依赖分为两种类型,窄依赖和宽依赖。

窄依赖: 每个父RDD的分区都至多被一个子RDD使用,比如map操作就是典型的窄依赖。

宽依赖: 多个子RDD的分区依赖一个父RDD的分区。比如groupByKey都属于宽依赖。

RDD分区函数
分区的划分对于shuffle类操作很关键,决定了该操作的父RDD和子RDD的依赖类型。比如之前提到的join操作,如果是协同划分的话,两个父RDD之间, 父RDD与子RDD之间能形成一致的分区安排。即同一个Key保证被映射到同一个分区,这样就是窄依赖。而如果不是协同划分,就会形成宽依赖。所谓的协同划分就是指定分区划分器以产生前后一致的分区安排。

Spark提供两种划分器,HashPartitioner (哈希分区划分器),(RangePartitioner) 范围分区划分器. 需要注意的是分区划分器只存在于PairRDD中,普通非(K,V)类型的Partitioner为None。

其中,5表示groupByKey会有5个分区,以HashPartitioner划分为5个分区

spark rdd分区与任务的关系相关推荐

  1. spark RDD分区2GB限制(Size exceeds Integer.MAX_VALUE)

    最近使用spark处理较大的数据文件,遇到了分区2G限制的问题,spark日志会报如下的日志: WARN scheduler.TaskSetManager: Lost task 19.0 in sta ...

  2. 深入理解Spark RDD——RDD分区计算器Partitioner

    在<深入理解Spark RDD--RDD依赖(构建DAG的关键)>一文,详细描述了RDD的宽窄依赖.RDD之间的依赖关系如果是Shuffle依赖,那么上游RDD该如何确定每个分区的输出将交 ...

  3. Spark—RDD依赖血缘关系

    文章目录 Spark-RDD依赖&血缘关系 1.RDD 血缘关系 2.RDD 依赖关系 3.窄依赖 4.宽依赖 5.宽窄依赖示意图 6.RDD 阶段划分 7.RDD 任务划分 Spark-RD ...

  4. Spark的RDD分区器

    RDD 分区器 基本介绍 Spark 目前支持Hash 分区.Range 分区和用户自定义分区.Hash 分区为当前的默认分区.分区器直接决定了RDD 中分区的个数.RDD 中每条数据经过Shuffl ...

  5. Spark RDD并行度与分区设置

    默认情况下,Spark 可以将一个作业切分多个任务后,发送给 Executor 节点并行计算,而能 够并行计算的任务数量我们称之为并行度.这个数量可以在构建 RDD 时指定.记住,这里 的并行执行的任 ...

  6. Spark算子:统计RDD分区中的元素及数量

    Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Bl ...

  7. Spark RDD的分区规则详解

    Spark RDD的分区规则 一.RDD中数据来源 二.读取内存数据分区规则 三.读取文件数据分区规则 3.1 分区数量的计算规则 3.2 数据分配到哪个分区规则 一.RDD中数据来源 2个地方:本地 ...

  8. 12 Spark on RDD 分区器

    RDD 分区器 Spark 目前支持 Hash 分区和 Range 分区,和用户自定义分区.Hash 分区为当前的默认分区.分区器直接决定了 RDD 中分区的个数.RDD 中每条数据经过 Shuffl ...

  9. spark学习13(spark RDD)

    RDD及其特点 1)RDD(Resillient Distributed Dataset)弹性分布式数据集,是spark提供的核心抽象.它代表一个不可变.可分区.里面的元素可并行计算的集合 2)RDD ...

最新文章

  1. 成功解决 绘图时行坐标名或列坐标名出现f0、f1、f2、f3、f4、f5(或者Column_0、Column_1、Column_2、Column_3)等命名而不是想要的具体对应字段命名
  2. java添加按钮点击事件_如何为odoo 10中的按钮点击事件添加一个java脚本处理程序?...
  3. 错误率_研究发现,商业语音识别系统存在高错误率
  4. python怎么写接口自动化_python接口自动化 小结
  5. 高并发架构解决方案总结
  6. python批量删除_Python批量删除只保留最近几天table的代码实例
  7. windows上配置新的conda env+torch
  8. html中如何计算图片的像素,html – 浏览器的1px计算问题(子像素问题)
  9. 游戏编程入门步骤,想不到吧.
  10. 性能测试CPU占用率太高如果解决?
  11. Spring bean配置单例或多例模式
  12. 怎么看计算机电源型号,电脑电源铭牌怎么看?台式机电源铭牌知识扫盲 拒绝虚标!...
  13. Ubuntu 18.04 安装 deepin 微信
  14. 服务器怎么买,腾讯云服务器购买三种流程介绍
  15. 【硬创邦】跟hoowa学做智能路由(十三):网络音箱之Android篇
  16. oracle 认识点概述(一)
  17. Python快捷创建文件夹和文件详解
  18. Windows上鲜为人知的三款黑马软件,款款深入人心
  19. codeup27978 除法算式(NOIP1995普及组第1题)
  20. 为什么要学习微信小程序直播开发?最新的小程序直播介绍和优势分析!

热门文章

  1. 消息提示类控件使用之Toast(吐司)的简单使用
  2. 执行npm run dev 报错 vue-element-admin@4.2.1 dev: `vue-cli-service serve`
  3. Android手机数据读写方法(内部存储、SD卡,网络加载,包内文件读取)
  4. Xue Bin Peng获SIGGRAPH 2022最佳博士论文,太极胡渊鸣获提名
  5. 基于微信小程序的家政服务预约系统(后台Java+SSM+MySQL)
  6. 昱章电气IPO被终止:曾拟募资4.25亿 年营收3.25亿
  7. golang力扣leetcode 2245.转角路径的乘积中最多能有几个尾随零
  8. Servlet文件下载例子详解及response的contentType类型大全
  9. AD转换 ADC设计
  10. 美团技术团队:实例详解机器学习如何解决问题