• Spark任务中Task数量确定和一些总结


    本文示例使用的组件:Spark3.x,Hadoop3.x,Spark on Yarn

    一些基本的概念

    Application: 一个sparkcontext就代表了一个Application
    Job :一个Application里可以有多个Job,在代码中的体现就是一次Spark的action算子执行就代表了一个Job
    Stage
    (1)一个Job可划分为多个Stage,Stage代表Job执行的阶段
    (2)不同Stage之间是串行执行的,也就是上一个阶段执行完毕才能执行下一个Stage
    (3)Stage的划分根据是否有Shuffle(RDD宽依赖,也叫Shuffle依赖)划分的,一个Job的Stage数等于Shuffle数+1

    Task:一个Stage可以划分多个Task,一个Stage的Task的总数等于这个Stage中最后一个RDD的分区数量

    分区数量:在读取HDFS分布式文件系统时,一般来说Spark RDD的分区数量等于HDFS中文件被切割的块数。(简单理解)

    如何计算Task总数?

    举个简单的例子如何计算Task总数:
    前提:HDFS一个块大小为128M
    例子:启动一个Spark的Job读取HDFS目录数据(简单的逻辑只读数据),没有shuffle操作所以只有一个Stage,那么这个Stage会划分多少个Task?
    假如要读取的目录为hdfs://tmp/Input目录下一共600G的数据,一共有1024个文件,所以一个文件600M,那么一个文件被切割 600 M/128M 约等于5个block, 那么1024个文件一共就是 5 * 1024 = 5120个块,所以分区数为5120个,那么这个Stage将会被划分5120个Task。

    :600 M/128M= 4.6875(因为小数点后面0.6875 > 0.2,则被单独分一个块,假如小数点小于等于0.2,则这部分数据合并为上一块,随着上一个块一起被计算)

    Task并行度:并行度代表有多少个Task可以并行执行,一般我们将Spark的并行度调整为:Executor个数 * 单个Executor的CPU个数,还是上面的例子假如有5120个任务,如果我有20个Executor,单个Executor的CPU设置为4核,那么并行度我们可以设置为20 * 4 = 80,那么5120个任务可并行执行的任务数就是80,其余任务排队等待,尽量保证一个CPU处理一个Task。

    =========================================================

    如有不对的理解欢迎指正!

  • 相关阅读:
    JS-Number数字类型详解
    使用AutoJs编写UI的踩坑记录
    CSS day_14(6.29) Sass基本规则和语法、云服务器的购买和使用
    记录“在Unity动画播放协程内等待动画播放完成时回调”遇到的坑
    不知道 MySQL 咋学?刷完牛客这 50 道题就够了!(第三篇)
    java8到java17的主要新增语法特性
    【Java集合中各种数据结构的方法汇总】
    推荐一款管理系统专用 低 代码工具,一天开发一个系统不是梦
    CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇
    Maven工程打jar包的N种方式
  • 原文地址:https://blog.csdn.net/u013189824/article/details/125888505