pyspark spark.executor.memory 是每个核心还是每个节点?

Posted

技术标签:

【中文标题】pyspark spark.executor.memory 是每个核心还是每个节点?【英文标题】:pyspark spark.executor.memory is per core or per node? 【发布时间】:2016-10-13 16:30:38 【问题描述】:

我的 spark 集群中有一个具有 24 个内核和 124Gb 内存的节点。当我将 spark.executor.memory 字段设置为 80g 时,是否期望每个节点或每个核心能够使用 80g 的 ram?

【问题讨论】:

【参考方案1】:

它是 per executor,可以配置为具有多个核心。您可以指定以下相关设置:

spark.executor.cores - 每个执行器应该有多少核心 spark.executor.instances - 整个集群共有多少个执行器 spark.executor.memory - 为每个执行程序分配多少 RAM spark.driver.memory - 给驱动程序多少内存

您可以选择是制作每个执行器只有 1 个核心的小型执行器,还是制作一个单片执行器。通常,我发现最好去中间的某个地方。每个执行器拥有多个核心允许 spark 在核心之间共享内存以用于广播数据之类的事情,但是拥有一个巨大的执行器意味着任何核心中的崩溃都会杀死整个执行器中的所有任务。

您还需要确保为驱动程序和操作系统保留一些内核和 RAM。因此,对于实际设置,您希望执行程序内存类似于:

NUM_EXECUTORS = (desired_total_executor_cores / num_cores_per_executor) EXECUTOR_RAM = (desired_total_executor_ram / NUM_EXECUTORS)

【讨论】:

以上是关于pyspark spark.executor.memory 是每个核心还是每个节点?的主要内容,如果未能解决你的问题,请参考以下文章

pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别

Pyspark 安装错误:没有名为“pyspark”的模块

Pyspark:将 sql 查询转换为 pyspark?

Pyspark - ImportError:无法从“pyspark”导入名称“SparkContext”

Pyspark:基于所有列减去/差异 pyspark 数据帧

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe