设为首页 加入收藏

TOP

Spark并发度
2019-02-12 01:21:19 】 浏览:53
Tags:Spark 并发

梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数、Executor数、core数目的关系。

输入可能以多个文件的形式存储在 HDFS 上,每个 File 都包含了很多块,称为 Block。当 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 操作会聚合成指定分区数,还有一些算子是可配置的。
作者:王燚光
链接:https://www.zhihu.com/question/33270495/answer/93424104
来源:知乎

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇windows下spark开发环境搭建 下一篇Spark 登录Openfire

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目