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

from:https://blog.csdn.net/u013013024/article/details/72876427

有部分图和语句摘抄别的博客,有些理解是自己的

梳理一下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操作会聚合成指定分区数,还有一些算子是可配置的。

1,Application

application(应用)其实就是用spark-submit提交的程序。比方说spark examples中的计算pi的SparkPi。一个application通常包含三部分:从数据源(比方说HDFS)取数据形成RDD,通过RDD的transformation和action进行计算,将结果输出到console或者外部存储(比方说collect收集输出到console)。

2,Driver

Spark中的driver感觉其实和yarn中Application Master的功能相类似。主要完成任务的调度以及和executor和cluster manager进行协调。有client和cluster联众模式。client模式driver在任务提交的机器上运行,而cluster模式会随机选择机器中的一台机器启动driver。从spark官网截图的一张图可以大致了解driver的功能。

3,Job

Spark中的Job和MR中Job不一样不一样。MR中Job主要是Map或者Reduce Job。而Spark的Job其实很好区别,一个action算子就算一个Job,比方说count,first等。

4, Task

Task是Spark中最新的执行单元。RDD一般是带有partitions的,每个partition的在一个executor上的执行可以任务是一个Task。

5, Stage

Stage概念是spark中独有的。一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency( 宽依赖)的概念。其实很好区分,看一下父RDD中的数据是否进入不同的子RDD,如果只进入到一个子RDD则是窄依赖,否则就是宽依赖。宽依赖和窄依赖的边界就是stage的划分点

参数列表如下所示:

--class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client --driver-memory 4g --num-executors 2 --executor-memory 2g --executor-cores 2 /opt/apps/spark-1.6.0-bin-hadoop2.6/lib/spark-examples*.jar 10

参数说明如下所示:

参数 参考值 说明
class org.apache.spark.examples.SparkPi 作业的主类。
master yarn 因为 E-MapReduce 使用 yarn 的模式,所以这里只能是 yarn 模式。
  yarn-client 等同于 –-master yarn —deploy-mode client, 此时不需要指定deploy-mode。
  yarn-cluster 等同于 –-master yarn —deploy-mode cluster, 此时不需要指定deploy-mode。
deploy-mode client client 模式表示作业的 AM 会放在 Master 节点上运行。要注意的是,如果设置这个参数,那么需要同时指定上面 master 为 yarn。
  cluster cluster 模式表示 AM 会随机的在 worker 节点中的任意一台上启动运行。要注意的是,如果设置这个参数,那么需要同时指定上面 master 为yarn。
driver-memory 4g driver 使用的内存,不可超过单机的 core 总数。
num-executors 2 创建多少个 executor。
executor-memory 2g 各个 executor 使用的最大内存,不可超过单机的最大可使用内存。
executor-cores 2 各个 executor 使用的并发线程数目,也即每个 executor 最大可并发执行的 Task 数目。

资源计算

在不同模式、不同的设置下运行时,作业使用的资源情况如下表所示:

  • yarn-client 模式的资源计算

    节点 资源类型 资源量(结果使用上面的例子计算得到)
    master core 1
      mem driver-memroy = 4G
    worker core num-executors * executor-cores = 4
      mem num-executors * executor-memory = 4G
    • 作业主程序(Driver 程序)会在 master 节点上执行。按照作业配置将分配 4G(由 —driver-memroy 指定)的内存给它(当然实际上可能没有用到)。
    • 会在 worker 节点上起 2 个(由 —num-executors 指定)executor,每一个 executor 最大能分配 2G(由 —executor-memory 指定)的内存,并最大支持 2 个(由—executor-cores 指定)task 的并发执行。
  • yarn-cluster 模式的资源计算
    节点 资源类型 资源量(结果使用上面的例子计算得到)
    master   一个很小的 client 程序,负责同步 job 信息,占用很小。
    worker core num-executors * executor-cores+spark.driver.cores = 5
      mem num-executors * executor-memory + driver-memroy = 8g
    说明 这里的 spark.driver.cores 默认是 1,也可以设置为更多。

资源使用的优化

  • yarn-client 模式

    若您有了一个大作业,使用 yarn-client 模式,想要多用一些这个集群的资源,请参见如下配置:

    --master yarn-client --driver-memory 5g –-num-executors 20 --executor-memory 4g --executor-cores 4

    注意

    • Spark 在分配内存时,会在用户设定的内存值上溢出 375M 或 7%(取大值)。
    • Yarn 分配 container 内存时,遵循向上取整的原则,这里也就是需要满足 1G 的整数倍。

    按照上述的资源计算公式,

    • master 的资源量为:

      • core:1
      • mem:6G (5G + 375M 向上取整为 6G)
    • workers 的资源量为:

      • core: 20*4 = 80
      • mem: 20*5G (4G + 375M 向上取整为 5G) = 100G
    可以看到总的资源没有超过集群的总资源,那么遵循这个原则,您还可以有很多种配置,例如:

    --master yarn-client --driver-memory 5g --num-executors 40 --executor-memory 1g --executor-cores 2

    --master yarn-client --driver-memory 5g --num-executors 15 --executor-memory 4g --executor-cores 4

    --master yarn-client --driver-memory 5g --num-executors 10 --executor-memory 9g --executor-cores 6

    原则上,按照上述的公式计算出来的需要资源不超过集群的最大资源量就可以。但在实际场景中,因为系统,hdfs 以及 E-MapReduce 的服务会需要使用 core 和 mem 资源,如果把 core 和 mem 都占用完了,反而会导致性能的下降,甚至无法运行。

    executor-cores 数一般也都会被设置成和集群的可使用核一致,因为如果设置的太多,CPU 会频繁切换,性能并不会提高。

  • yarn-cluster 模式
    当使用 yarn-cluster 模式后,Driver 程序会被放到 worker 节点上。资源会占用到 worker 的资源池里面,这时若想要多用一些这个集群的资源,请参加如下配置:

    --master yarn-cluster --driver-memory 5g --num-executors 15 --executor-memory 4g --executor-cores 4

转载于:https://www.cnblogs.com/bonelee/p/11063453.html

Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数相关推荐

  1. Spark中Task数量的分析

    本文主要说一下Spark中Task相关概念.RDD计算时Task的数量.Spark Streaming计算时Task的数量. Task作为Spark作业执行的最小单位,Task的数量及运行快慢间接决定 ...

  2. 节点+Executor+Core+Task+Partition+RDD+job+DAG+stage+action算子之间的数量关系+两种并行度的区别

    图解 上面的Core与Task的默认对应关系是一对一,也可以通过.config("spark.task.cpus",1)修改. 这个参数的意思是:为每个任务分配的内核数量 上面图中 ...

  3. easyui的tree获取父节点_力扣 1519——子数中标签相同的节点数

    本题主要在于对树这种数据结构的考察,以及深度优先遍历的使用,优化时可以采取空间换时间的策略. 原题 给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰 ...

  4. 什么是spark的惰性计算?有什么优势?_spark——spark中常说RDD,究竟RDD是什么?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题第二篇文章,我们来看spark非常重要的一个概念--RDD. 在上一讲当中我们在本地安装好了spark,虽然我们只有lo ...

  5. leetcode周赛5465. 子树中标签相同的节点数

    leetcode周赛5465. 子树中标签相同的节点数 给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰好有 n - 1 条 edges .树的根节 ...

  6. [leetcode周赛198] 5465. 子树中标签相同的节点数

    给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰好有 n - 1 条 edges .树的根节点为节点 0 ,树上的每一个节点都有一个标签,也就是字符 ...

  7. java executor 源码_Java线程池ThreadPoolExecutor深度探索及源码解析

    我们的程序里,时常要使用多线程.因此多线程的管理变的尤为重要.ThreadPoolExecutor很好的解决了这一点.本篇文章主要从源码入手,分析ThreadPoolExecutor的原理. 1.标记 ...

  8. Spark 中 File,Block,Split,Task,Partition,RDD概念的理解

    1,在 HDFS 中会以 Block 为单位进行存储很多的 File,也就是说每个 File 可能会被拆分成多个 Block 存储在 HDFS 上: 2,当 Spark 读取 HDFS 上的文件作为输 ...

  9. 如何配置神经网络中的层数和节点数

    向AI转型的程序员都关注了这个号

最新文章

  1. 图书管理系统需求说明书
  2. 【学习笔记】之多项式使人头秃
  3. java-Integer的自动装箱与拆箱
  4. BIO、NIO、AIO的区别——Netty系列(一)
  5. 未雨绸缪 | 一文简介 Azure Front Door
  6. Java RMI,Socket,HttpClient
  7. php.c drcom,校园网绕过Drcom安装自动登录程序到路由器
  8. php中二进制函数,PHP-----函数和二进制
  9. EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器...
  10. 图表中如何实现动态变更分类轴与系列值
  11. 汉诺塔问题(递归思想)(堆栈学习)
  12. 基于openmv的汽车内后视镜
  13. 常用的卫星公司数据查询(包括SPOT、QuickBird、Worldview、IKONOS、GF等)
  14. DHCP动态获取IP地址流程
  15. 智安网络丨网络架构,是数据中心的“神经脉络”
  16. Java 多线程平行计算总结
  17. 《评人工智能如何走向新阶段》后记(再续22)
  18. RMAN 下CROSSCHECK命令 详解
  19. IC 产品的质量与可靠性测试
  20. java 微秒 时间_Java中时间的计算 年月日小时分钟秒毫秒微秒

热门文章

  1. JAVA之JVM之内存分配与回收策略(二)
  2. Jenkins之邮件通知
  3. java免安装工具包_Java1.8安装及环境变量配置
  4. HTML中如何写for循环全选,利用html:multibox 循环遍历checkbox 并且全选全解除
  5. java同步变异步框架_java-如何使用Spring配置异步和同步事件发布者
  6. python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...
  7. python布尔类型运算_Python中布尔类型
  8. android json mysql_Android通过json向MySQL中读写数据的方法详解【写入篇】
  9. php编译html,将PHP模板文件编译为静态HTML页面的Ant任务
  10. mysq 开启慢查询日志