spark内核篇-task数与并行度
每一个 spark job 根据 shuffle 划分 stage,每个 stage 形成一个或者多个 taskSet,了解了每个 stage 需要运行多少个 task,有助于我们优化 spark 运行
task 数
首先需要了解以下概念:
RDD,弹性分布式数据集,多个 partition;
split,切片,HDFS 上文件为什么要切片,如何切片,参考我的博客 hadoop 的 Split;
textFlie 分区,textFile 如何对一个文件分区,参考我的博客 RDD认知与创建;
创建 RDD 的过程我们可以认为没有 task 的概念,比如 读取 HDFS 文件;
有了 RDD 后才有 task 的概念;
重点
一个 inputSplit 对应 RDD 的一个 partition;
RDD 的一个 partition 对应一个 task,也就是说 一个 inputSplit 对应一个 task;
通常情况下 一个 block 对应一个 inputSplit;
// 以 textFile 为例,每个 inputSplit 不能大于 blockSize,也就是说 可以把 block 切开,但不能把多个 block 组合起来,如果不指定分区,那么每个切片就是 block;
作如下实验证明上述结论
import time
from pyspark import SparkContext time.clock()
sc = SparkContext(master='yarn')
rdd = sc.textFile('/spark/gps/GPS3.csv', 2).repartition(100).map(lambda x: x).count()
print(time.clock()) ##### GPS3.csv 315M,分为 3 个 block
#### 不指定分区-100 runtime:0.64
### 划分2个 stage,
# 第一个 stage sc.textFile('/spark/gps/GPS3.csv').repartition(100) 共 3 个task,
# 第二个 stage .map(lambda x: x).count() 共 100个task
# 19/12/10 22:16:15 INFO cluster.YarnScheduler: Adding task set 0.0 with 3 tasks
# 19/12/10 22:16:34 INFO scheduler.TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0, hadoop13, executor 2, partition 0, NODE_LOCAL, 7899 bytes)
# 19/12/10 22:17:07 INFO cluster.YarnScheduler: Adding task set 1.0 with 100 tasks #### 指定 5 个分区-100 runtime:0.54
### 划分2个 stage,
# 第一个 stage sc.textFile('/spark/gps/GPS3.csv').repartition(100) 共 5 个task,
# 第二个 stage .map(lambda x: x).count() 共 100个task
# 19/12/10 22:23:09 INFO cluster.YarnScheduler: Adding task set 0.0 with 5 tasks
# 19/12/10 22:17:07 INFO cluster.YarnScheduler: Adding task set 1.0 with 100 tasks #### 指定 2 个分区-100 runtime:0.6
### 划分2个 stage,
# 第一个 stage sc.textFile('/spark/gps/GPS3.csv').repartition(100) 共 3 个task,
# 第二个 stage .map(lambda x: x).count() 共 100个task
# 19/12/10 22:23:09 INFO cluster.YarnScheduler: Adding task set 0.0 with 3 tasks
# 19/12/10 22:17:07 INFO cluster.YarnScheduler: Adding task set 1.0 with 100 tasks
可以看到
task 并行度
首先明确一点,并行度与 task 数并无关系,并行度是由 spark-submit 提交的参数决定的
taskSet 被分发到多个 Executor 执行;
每个节点可以运行多个 Executor,一个 Executor 相当于一个进程;
一个 Executor 可以有多个 core,一个 core 执行一个 task,一个 core 相当于 Executor 进程里的一个线程;
task 的并发度 = Executor 数 x core 数 = 总 core 数;
对应到 yarn 模式的 spark-submit 参数
--num-executors
--executor-cores
--total-executor-cores 【这个参数官方解释只能用于 Spark standalone and Mesos only 模式,不过我用在 yarn 模式没报错】
试想如果有 100 个任务,20 个 Executor,每个 Executor 5 个 core,那么资源利用率极高;
然而加入只有 10 个任务,还是 20 个 Executor,每个 Executor 5 个 core,那么资源有很大浪费,这是 spark 调优的一个方向
参考资料:
https://blog.csdn.net/u012965373/article/details/80847543
https://blog.csdn.net/abc_321a/article/details/82020974
spark内核篇-task数与并行度的更多相关文章
- spark内核篇-任务调度机制
在生产环境中,spark 部署方式一般都是 yarn-cluster 模式,本文针对该模式进行讲解,当然大体思路也适用于其他模式 基础概念 一个 spark 应用包含 job.stage.task 三 ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- 【大数据】Spark内核解析
1. Spark 内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spa ...
- 【Spark 内核】 Spark 内核解析-上
Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更 ...
- Spark内核解析
Spark内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核 ...
- Spark 核心篇-SparkContext
本章内容: 1.功能描述 本篇文章就要根据源码分析SparkContext所做的一些事情,用过Spark的开发者都知道SparkContext是编写Spark程序用到的第一个类,足以说明SparkCo ...
- Spark 核心篇-SparkEnv
本章内容: 1.功能概述 SparkEnv是Spark的执行环境对象,其中包括与众多Executor执行相关的对象.Spark 对任务的计算都依托于 Executor 的能力,所有的 Executor ...
- Spark内核| 调度策略| SparkShuffle| 内存管理| 内存空间分配| 核心组件
1. 调度策略 TaskScheduler会先把DAGScheduler给过来的TaskSet封装成TaskSetManager扔到任务队列里,然后再从任务队列里按照一定的规则把它们取出来在Sched ...
- Spark学习笔记1——第一个Spark程序:单词数统计
Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...
随机推荐
- Web安全(白帽子讲)之第一章
安全问题的本质是信任的问题,并是一个持续的过程. 安全三要素 Confidentiality:机密性-----要求保护数据内容不能泄密 Integrity:完整性-----要求保护数据内容的完整,没有 ...
- Educational Codeforces Round 53 E. Segment Sum(数位DP)
Educational Codeforces Round 53 E. Segment Sum 题意: 问[L,R]区间内有多少个数满足:其由不超过k种数字构成. 思路: 数位DP裸题,也比较好想.由于 ...
- HDU 4612 Warm up —— (缩点 + 求树的直径)
题意:一个无向图,问建立一条新边以后桥的最小数量. 分析:缩点以后,找出新图的树的直径,将这两点连接即可. 但是题目有个note:两点之间可能有重边!而用普通的vector保存边的话,用v!=fa的话 ...
- CSS高级学习-1
优先级 权值 标签权值为1,类权值为10,ID权值最高为100. p{color:red;} /*权值为1*/ p span{color:green;} /*权值为1+1=2*/ .warning{c ...
- oracle函数mysql替代方案
=====1.日期相关===//获取当前日期在本周的周一select subdate(now(),date_format(now(),'%w')-1);//获取当前日期在本周的周日 select su ...
- 包与类的命名 - service tool util 区别
包与类的命名和定位时,service tool util 常常搞混淆,在此分析一下它们的定位: 名称 特点与定位 独立性 方法和类的属性 util 通用的.与业务无关的,可以独立出来,可供其他项目使用 ...
- 【转载】详解CI、CD相关概念
在软件的编译发布的过程中,经常能够看到CI.CD这样的词语.其实他们是专业的缩写短语,这里介绍下他们的概念和区别. 敏捷软件开发 敏捷软件开发,英文全称:Agile software developm ...
- 黑马vue---16、vue中通过属性绑定为元素设置class类样式
黑马vue---16.vue中通过属性绑定为元素设置class类样式 一.总结 一句话总结: 这里就是为元素绑定class样式,和后面的style样式区别一下 vue中class样式绑定方式的相对于原 ...
- 中间件 | Nginx实现动静分离
Nginx动静分离基本概述 动静分离,通过中间件将动静分离和静态请求进行分离: 通过中间件将动态请求和静态请求分离,可以建上不必要的请求消耗,同事能减少请求的延时. 通过中间件将动态请求和静态请求分离 ...
- linux内核中有哪些子系统(框架)呢?
注意: 分析用的linux内核版本为5.1.3 1. RTC子系统 2. Remote Processor子系统 3. Remote Processor Message子系统 4. SCSI子系统 5 ...