【问题标题】:Is there any relation between vCpu on Fargate resource and spark core/threads?Fargate 资源上的 vCpu 与 Spark 核心/线程之间是否有任何关系?
【发布时间】:2021-05-10 14:56:32
【问题描述】:

我正在以独立模式在 aws fargate 上运行 spark 批处理作业。在计算环境中,我有8 vcpu,作业定义有 1 个 vcpu 和 2048 mb 内存。在 spark 应用程序中,我可以指定要使用的核心数量,并使用以下代码执行此操作

sparkSess = SparkSession.builder.master("local[8]")\
    .appName("test app")\
    .config("spark.debug.maxToStringFields", "1000")\
    .config("spark.sql.sources.partitionOverwriteMode", "dynamic")\
    .getOrCreate()

local[8] 指定 8 个内核/线程(这是我的假设)。 最初我在没有指定内核的情况下运行 spark 应用程序,我认为作业是在单线程中运行的,大约需要 10 分钟才能完成,但是有了这个数字,它减少了处理时间。我从 2 开始,它几乎减少到 5 分钟,然后我改为 4、8,现在几乎需要 4 分钟。但我不明白 vcpu 和 spark 线程之间的关系。无论我为内核指定的数量是多少,sparkContext.defaultParallelism 都会向我显示该值。

这是正确的方法吗? 此数字与我在作业定义或计算环境中指定的 vcpu 之间是否存在任何关系。

【问题讨论】:

    标签: apache-spark pyspark aws-fargate


    【解决方案1】:

    您正在 Spark 本地模式下运行。 Learning Spark 对本地模式有这样的说法:

    Spark 驱动程序在单个 JVM 上运行,例如笔记本电脑或单个节点

    Spark 执行器与驱动程序在同一个 JVM 上运行

    集群管理器在同一台主机上运行

    Damji、Jules S.、Wenig、Brooke、Das、Tathagata、Lee、Denny。学习火花(第 30 页)。奥莱利媒体。 Kindle 版。

    local[N]launches with N threads。鉴于以上Local Mode的定义,这N个线程必须由Local Mode Driver、Executor和Cluster Manager共享。

    因此,从可用的 vCPU 中,为 Driver 线程分配一个 vCPU,为 Cluster Manager 分配一个,为 OS 分配一个,为 Executor 分配剩余的 vCPU 似乎是合理的。

    Executor 的最佳线程数/vCPU 数将取决于您的数据具有的分区数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2011-06-28
      • 2016-11-14
      相关资源
      最近更新 更多