Spark分区数、task数目、core数目、worker节点数目、executor数目梳理

spark隐式创建由操作组成的逻辑上的有向无环图。驱动器执行时,它会把这个逻辑图转换为物理执行计划,然后将逻辑计划转换为一系列的步骤(stage),每个步骤由多个任务组成。

步骤组成任务、数据组成任务。所以数据和对数据的操作都封装在任务里面了?数据是分布的,那么步骤的执行是什么过程?因为是流水线操作,所以对于每一个工作节点,都有一份步骤,然后根据步骤一步步计算???

Spark文档中使用驱动器节点和执行器节点的概念来描述执行Spark的进程

主节点(master)和工作节点(worker)的概念被用来分别表述集群管理器中的中心化部分和分布式部分。

输入以多个文件的形式存储在HDFS上,每个File都包含了很多块,成为Block

如果输入只有一个文件存储在Hbase里,也是按块大小分布存储的吗?

以块形式存储的文件可以跨节点嘛?

Spark读取文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,一般是将若干个Block合并为一个输入分片,成为InputSplit。InputSplit不能跨文件。

随后为这些输入分片生成具体的Task。InputSplit与Task是一一对应的关系

随后这些具体的Task每个都会被分配到集群上的某个节点的某个Ececutor去执行

  1. 每个节点可以起一个或多个Executor

executor就是执行器节点嘛?所以每个工作节点(主机)可以有多个执行器?

  1. 每个Executor由若干个core组成,每个Executor的每个core(虚拟core,可以理解为一个Executor的工作线程)一次只能执行一个Task
  2. 每个Task执行的结果就是生产了目标RDD的一个partition

Task执行的并发度 = Executor的个数 * Executor的核数

partition的数目:

  1. 数据读入阶段。例如sc.textFile,输入文件划分为多少个InputSpliter就会需要多少的初始Task
  2. Map阶段partition不变
  3. Reduce阶段,RDD会触发shuffle操作,聚合后的RDD的partition数目根具体的操作有关

RDD在计算的时候,每一个分区都会起一个Task,所以RDD的分区数目决定了总的Task数目

比如RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个两2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。 
如果计算资源不变,你有101个task的话,就需要6个轮次,在最后一轮中,只有一个task在执行,其余核都在空转。 
如果资源不变,你的RDD只有2个分区,那么同一时刻只有2个task运行,其余18个核空转,造成资源浪费。这就是在spark调优中,增大RDD分区数目,增大任务并行度的做法。

Spark的Driver、Job和Stage

csdn jwLee

例子说明

在这个例子中,假设你需要做如下一些事情:

  1. 将一个包含人名和地址的文件加载到RDD1中
  2. 将一个包含人名和电话的文件加载到RDD2中
  3. 通过name来Join RDD1和RDD2,生成RDD3
  4. 在RDD3上做Map,给每个人生成一个HTML展示卡作为RDD4
  5. 将RDD4保存到文件
  6. 在RDD1上做Map,从每个地址中提取邮编,结果生成RDD5
  7. 在RDD5上做聚合,计算出每个邮编地区中生活的人数,结果生成RDD6
  8. Collect RDD6,并且将这些统计结果输出到stdout

其中红色虚线表示输入和输出,蓝色实线是对RDD的操作,圆圈中的数字对应了以上的8个步骤。接下来解释driver program, job和stage这几个概念:

  1. Driver program是全部的代码,运行所有的8个步骤。
  2. 第五步中的save和第八步中的collect都是Spark Job。Spark中每个action对应着一个Job,transformation不是Job。
  3. 其他的步骤(1、2、3、4、6、7)被Spark组织成stages,每个job则是一些stage序列的结果。对于一些简单的场景,一个job可以只有一个stage。但是对于数据重分区的需求(比如第三步中的join),或者任何破坏数据局域性的事件,通常会导致更多的stage。可以将stage看作是能够产生中间结果的计算。这种计算可以被持久化,比如可以把RDD1持久化来避免重复计算。
  4. 以上全部三个概念解释了某个算法被拆分的逻辑。相比之下,task是一个特定的数据片段,在给定的executor上,它可以跨越某个特定的stage。

到了这里,很多概念就清楚了。驱动程序就是执行了一个Spark Application的main函数和创建Spark Context的进程,它包含了这个application的全部代码。Spark Application中的每个action会被Spark作为Job进行调度。每个Job是一个计算序列的最终结果,而这个序列中能够产生中间结果的计算就是一个stage。

通常Action对应了Job,而Transformation对应了Stage

官方解释如下(http://spark.apache.org/docs/latest/cluster-overview.html): 
Driver Program: The process running the main() function of the application and creating the SparkContext. 
Job: A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action (e.g. save, collect); you’ll see this term used in the driver’s logs. 
Stage: Each job gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in MapReduce); you’ll see this term used in the driver’s logs.

一个Job被拆分成若干个Stage,每个Stage执行一些计算,产生一些中间结果。它们的目的是最终生成这个Job的计算结果。而每个Stage是一个task set,包含若干个task。Task是Spark中最小的工作单元,在一个executor上完成一个特定的事情。

Spark分区数、task数目、core数目、worker节点数目、executor数目梳理的更多相关文章

  1. spark分区数,task数目,core数,worker节点个数,excutor数量梳理

    作者:王燚光链接:https://www.zhihu.com/question/33270495/answer/93424104来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系和Application,Driver,Job,Task,Stage理解

    梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数.Executor数.core数目的关系. 输入可能以多个文件的形式存储在H ...

  3. Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数

    Spark中Task,Partition,RDD.节点数.Executor数.core数目的关系和Application,Driver,Job,Task,Stage理解 from:https://bl ...

  4. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

  5. 【原】storm源码之理解Storm中Worker、Executor、Task关系

    Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:1. Worker(进程)2. Executor(线程)3. Task 下图简要描述了这3者之间的关 ...

  6. [Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本課主題 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 [引言部份:你希望读者 ...

  7. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本课主题 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 Spark Worke ...

  8. 线上Storm的worker,executor,task参数调优篇

    问题引入: 线上最近的数据量越来越大,出现了数据处理延迟的现象,观察storm ui的各项数据,发现有大量的spout失败的情况,如下: ------------------------------- ...

  9. spark出现task不能序列化错误的解决方法

    应用场景:使用JavaHiveContext执行SQL之后,希望能得到其字段名及相应的值,但却出现"Caused by: java.io.NotSerializableException: ...

随机推荐

  1. Servlet-斜杠在web中不同意义

    Servlet-斜杠在web中不同意义 在web中 / 斜杠是一种绝对路径 / 斜杠 如果被浏览器解析,得到的地址是:http://ip/port/ / 斜杠 如果被服务器解析,得到的地址是:http ...

  2. Linux查看CPU历史负载

    sar -f /var/log/sa/sa20 -s 02:00:00 -e 06:00:00 | head -n 50 sysstat工具与负载历史回放 很多系统负载过高的时候我们是无法立即获知或者 ...

  3. Java架构系列问题合集-目录

    接下来会做一个系列, 分类说明关于Java项目研发和架构工作需要了解的问题 Java语法 Java语法专题1: 类初始化的构造顺序 https://www.cnblogs.com/milton/p/1 ...

  4. SuperPoint: Self-Supervised Interest Point Detection and Description 论文笔记

    Introduction 这篇文章设计了一种自监督网络框架,能够同时提取特征点的位置以及描述子.相比于patch-based方法,本文提出的算法能够在原始图像提取到像素级精度的特征点的位置及其描述子. ...

  5. Programiz C 语言教程·翻译完成

    原文:Programiz 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 学习资源 目录 C 简介 C 关键字和 ...

  6. 如何将EDI报文转换为CSV格式文件?

    如果您对EDI项目实施有一定的了解,想必您一定知道,在正式开始EDI项目实施之前,都会有EDI顾问与您接洽,沟通EDI项目需求.其中,会包含EDI通信双方使用哪种传输协议,传输的报文是符合什么标准的, ...

  7. 各种形式存放token

    1.可以将token存储在 localstorage里面,在一个统一的地方复写请求头,让每次请求都在header中带上这个token, 当token失效的时候,后端肯定会返回401,这个时候在你可以在 ...

  8. js中全局变量和局部变量以及变量声明提升

    javascript中全局变量和局部变量的区别 转载前端小99 发布于2018-04-23 15:31:35 阅读数 2102  收藏 展开 [javascript] view plain copy ...

  9. java - HashMap原理及实现 (转)

    众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry.这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干. HashMap ...

  10. windows 崩溃不提示

    转载请注明来源:https://www.cnblogs.com/hookjc/ 碰到某些程序崩溃时弹出带红色叉叉的错误窗口或者是叫你选择调试或关闭的窗口,很碍眼.不过平时也没去理它,点掉就好. 今天客 ...