执行器中的核心数和 OOM 错误

问题描述 投票:0回答:1

我读过一些关于 Spark 应用程序执行器中 OOM 错误的文章,其中许多提到高并发是可能的原因之一。我知道并发性由核心数量决定,核心数量决定执行器中可以运行的最大任务数量。

高并发:如果执行器的核心数量不成比例,我们将处理太多分区。每个分区都有其元数据和内存开销。由于它们是并行运行的,因此它们将需要执行器的内存并最终导致 OOM 错误。为了解决这个问题,我们可以设置以下配置。

从上面我了解到多个并行任务将争夺内存以处理分区。但我也知道 Spark 将数据溢出到磁盘中。那么为什么每个核心不能根据需要溢出数据以促进应用程序不间断运行呢?

apache-spark pyspark apache-spark-sql
1个回答
0
投票

所有任务都不能溢出。泄漏也非常低效。 顺便说一句, oom 的背景如此多样。

在我看来,几个较大的执行器(8cpu/64gb)往往比多个小的执行器(8×1cpu/8gb)更不容易出现 OOM。特别是当数据倾斜时,大型任务可能会失败,并在所有可用 RAM 的情况下单独重试(1 个 CPU 64GB 与 8GB)。此外,您将获得更少的 RPC 网络和更少的执行器,并且您将节省一些带有 Spark 专用内存的 ram,以及在广播的情况下。

总体而言,这实际上取决于您的数据,但一般来说大型执行器更为优化。最好是对作业进行概要分析以了解其用途。可以使用 Spark ui 或使用 Java 资源分析器来完成。否则你就是盲目的,无法做出有效的决定。

© www.soinside.com 2019 - 2024. All rights reserved.