• 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。

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

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

  • 相关阅读:
    AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘解决办法
    界面组件DevExpress ASP.NET Core v23.1 - 进一步升级UI组件
    变频器基础问答集1-20
    【python与数据分析】Pandas统计分析基础
    玩转HarmonyOS专项测试,轻松上架“五星”高品质应用
    Python和Excel的完美结合:常用操作汇总(案例详析)
    微信小程序日历插件对比
    Spring简介
    《痞子衡嵌入式半月刊》 第 56 期
    试从多个方面比较电路交换、报文交换和分组交换的主要优缺点?
  • 原文地址:https://blog.csdn.net/u013189824/article/details/125888505