调优概述

在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识,并知道在Spark作业运行过程中,有哪些资源参数是可以设置的,以及如何设置合适的参数值。

Spark作业基本运行原理

详细原理见上图。我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core。而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Standalone集群,也可以是其他的资源管理集群,美团•大众点评使用的是YARN作为资源管理集群)申请运行Spark作业需要使用的资源,这里的资源指的就是Executor进程。YARN集群管理器会根据我们为Spark作业设置的资源参数,在各个工作节点上,启动一定数量的Executor进程,每个Executor进程都占有一定数量的内存和CPU core。

在申请到了作业执行所需的资源之后,Driver进程就会开始调度和执行我们编写的作业代码了。Driver进程会将我们编写的Spark作业代码分拆为多个stage,每个stage执行一部分代码片段,并为每个stage创建一批task,然后将这些task分配到各个Executor进程中执行。task是最小的计算单元,负责执行一模一样的计算逻辑(也就是我们自己编写的某个代码片段),只是每个task处理的数据不同而已。一个stage的所有task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver就会调度运行下一个stage。下一个stage的task的输入数据就是上一个stage输出的中间结果。如此循环往复,直到将我们自己编写的代码逻辑全部执行完,并且计算完所有的数据,得到我们想要的结果为止。

Spark是根据shuffle类算子来进行stage的划分。如果我们的代码中执行了某个shuffle类算子(比如reduceByKey、join等),那么就会在该算子处,划分出一个stage界限来。可以大致理解为,shuffle算子执行之前的代码会被划分为一个stage,shuffle算子执行以及之后的代码会被划分为下一个stage。因此一个stage刚开始执行的时候,它的每个task可能都会从上一个stage的task所在的节点,去通过网络传输拉取需要自己处理的所有key,然后对拉取到的所有相同的key使用我们自己编写的算子函数执行聚合操作(比如reduceByKey()算子接收的函数)。这个过程就是shuffle。

当我们在代码中执行了cache/persist等持久化操作时,根据我们选择的持久化级别的不同,每个task计算出来的数据也会保存到Executor进程的内存或者所在节点的磁盘文件中。

因此Executor的内存主要分为三块:第一块是让task执行我们自己编写的代码时使用,默认是占Executor总内存的20%;第二块是让task通过shuffle过程拉取了上一个stage的task的输出后,进行聚合等操作时使用,默认也是占Executor总内存的20%;第三块是让RDD持久化时使用,默认占Executor总内存的60%。

task的执行速度是跟每个Executor进程的CPU core数量有直接关系的。一个CPU core同一时间只能执行一个线程。而每个Executor进程上分配到的多个task,都是以每个task一条线程的方式,多线程并发运行的。如果CPU core数量比较充足,而且分配到的task数量比较合理,那么通常来说,可以比较快速和高效地执行完这些task线程。

以上就是Spark作业的基本运行原理的说明,大家可以结合上图来理解。理解作业基本原理,是我们进行资源参数调优的基本前提。

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

spark 任务运行原理相关推荐

  1. Spark SQL运行原理和架构

    一 Spark SQL运行架构 Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析.绑定.优化.执行.Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对T ...

  2. spark基础之spark sql运行原理和架构

    一 Spark SQL运行架构 Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析.绑定.优化.执行.Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对T ...

  3. Spark Shuffle运行原理

    1.什么是spark shuffle? Shuffle中文意思就是"洗牌",在Spark中Shuffle的目的是为了保证每一个key所对应的value都会汇聚到同一个分区上去聚合和 ...

  4. Spark:运行原理 图解

    Spark应用程序以进程集合为单位在分布式集群上运行,通过driver程序的main方法创建的SparkContext对象与集群交互. 1.Spark通过SparkContext向Cluster ma ...

  5. spark on yarn 完全分布式_Spark编程笔记(1)-架构基础与运行原理

    引言 根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一 次重大变革 .当前我们正处于第三次信息浪潮(2010年前后),物联网.云计算和大数据技术突飞猛进. 信息爆炸是我们当前所需要解决 ...

  6. SPARK:作业基本运行原理

    Spark作业基本运行原理: 我们使用spark-submit提交一个spark作业之后,这个作业就会启动一个对应的Driver进程.根据你使用的部署模式(deploy-mode)不同: 1)Driv ...

  7. Spark运行原理剖析

    http://ihoge.cn/2018/Spark%20Scheduler.html Apache Spark是一个开源的,强大的分布式查询和处理引擎.它提供MapReduce的灵活性和可扩展性,但 ...

  8. spark任务shell运行_大数据系列:Spark的工作原理及架构

    介绍 本Apache Spark教程将说明Apache Spark的运行时架构以及主要的Spark术语,例如Apache SparkContext,Spark shell,Apache Spark应用 ...

  9. spark启动的worker节点是localhost_Spark大数据在线培训:Spark运行原理解析

    在大数据技术框架当中,Spark是继Hadoop之后的又一代表性框架,也是学习大数据当中必学的重点技术框架.在这些年的发展当中,Spark所占据的市场地位,也在不断拓展.今天的Spark大数据在线培训 ...

最新文章

  1. Linux多线程管理: 多线程编程
  2. 分布式调用跟踪系统的设计和应用
  3. 启动tomcat报错Caused by: org.apache.catalina.LifecycleException: No UserDatabase component
  4. Android 浏览器的研究(四)--- Apk的启动和主页的加载过程
  5. 【Linux】一步一步学Linux——talk命令(238)
  6. 图文:详解数据库Oracle 11g的基本安装
  7. 2021年母婴行业洞察报告
  8. 蓝星二开某微商城源码+搭建教程
  9. python利用tkinter弹出消息对话框小程序代码
  10. JUnit5基本用法
  11. 腾讯云的云数据库MYSQL配置
  12. 啥?喝着阔落吃着西瓜就把Promise手写出来了???
  13. html中怎么加入动态图片,视频加动态水印 怎么在视频画面中添加一个gif动态图片水印...
  14. 33个训练大脑的小方法
  15. 使用图灵机器人笑话功能提高微信公众帐号活跃度
  16. es6 箭头函数 模板字符串 点点点运算符
  17. 微信html下拉刷新页面,微信公众号内的页面的下拉刷新,兼容手机端和PC端
  18. UCF Local Programming Contest 2018题解
  19. 【整理】GOS附件的上传与下载
  20. 我的北京工作居住证申请之旅

热门文章

  1. http提交json格式数据自动加\
  2. [转]php与memcached服务器交互的分布式实现源码分析[memcache版]
  3. 汉川一中2021高考成绩查询,2021年汉川市高考状元名单资料,今年汉川市高考状元多少分...
  4. python批量读取根目录下文件内容并保存
  5. Tensorflow【实战Google深度学习框架】全连接神经网络以及可视化
  6. python【蓝桥杯vip练习题库】ADV-181质因数2(短除法)
  7. 中序遍历的非递归算法
  8. python 返回函数对象_Python—函数对象与闭包
  9. qt 启动画面显示图片_Qt程序起动画面QSplashScreen
  10. 360导航源码php,114啦网址导航源码仿360网址导航最新版