gpt4 book ai didi

mapreduce - 如何限制每个执行器并发map任务的数量?

转载 作者:行者123 更新时间:2023-12-02 22:24:48 31 4
gpt4 key购买 nike

我的 Spark 应用程序中的映射操作采用 RDD[A] 作为输入,并使用自定义映射函数 func 映射 RDD[A] 中的每个元素(x:A):B 到 B 类型的另一个对象。因为 func() 在计算每个输入 x 时需要大量内存,所以我想限制每个执行器并发映射任务的数量,以便同一执行器上的所有任务所需的内存总量不超过节点上可用的物理内存量。

我检查了可用的 Spark 配置,但不确定使用哪一个。使用coalesce(numPartitions)设置RDD[A]的分区数量是否可以达到目的?

最佳答案

每个执行器的并发任务数与可用核心数有关,而不是与任务数有关,因此使用 coalescerepartition 更改并行级别不会有助于限制每个任务使用的内存,仅限制给定任务需要处理的每个分区上的数据量 (*)。

据我所知,没有办法限制单个任务使用的内存,因为它共享工作线程 JVM 的资源,因此与同一执行器上的其他任务共享内存。

假设每个任务公平共享,每个任务(核心)可用内存量的指导原则为:

spark.executor.memory * spark.storage.memoryFraction / #cores-per-executor

强制每个执行程序执行更少的任务,从而为每个任务提供更多可用内存的一种方法可能是使用 spark.task.cpus(默认 = 1)为每个任务分配更多内核

(*) 鉴于这里关注的是 RDD 的每个元素 x 的级别,唯一可能影响内存使用的设置是将并行级别设置为小于单个执行器的 CPU,但这会导致集群资源的严重利用不足,因为除了其中一个工作器外,所有工作器都会空闲。

关于mapreduce - 如何限制每个执行器并发map任务的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738186/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com