如何知道 pyspark 中广播变量的可用内存量?

Posted

技术标签:

【中文标题】如何知道 pyspark 中广播变量的可用内存量?【英文标题】:How to know the amount of memory available for broadcast variables in pyspark? 【发布时间】:2017-12-07 23:44:50 【问题描述】:

我有一个在 pyspark 中使用的广播变量,我想知道我有多少可用空间。

我知道广播变量保留在spark.executor.memory 内,但它是否必须适合存储范围?还是处理的范围?

我知道spark.memory.fraction 用于确定spark.executor.memory 用于存储的比例与用于处理的数量。但是,假设我的 spark.executor.memory 是 10GB,spark.memory.fraction0.75

广播变量是否必须小于2.5GB 或小于5GB

这是 pyspark 1.6.1。

另外,这里有一个资源可以用作参考点:https://0x0fff.com/spark-memory-management/ 我不明白那篇文章中的“用户内存”是什么。

EDIT :作为这个问题的扩展,很高兴知道cached 表的存储位置。那些和广播变量在同一个地方吗?或不同的地方?在我看来,这些都在 spark.memory.storageFraction 内部。

【问题讨论】:

【参考方案1】:

广播变量存储在Python进程的内存中(JVM上也有序列化副本)。所以使用的内存部分是执行内存。

请记住,PySpark 会为每个 Spark 核心保留一份变量副本。所以实际内存限制更接近

(`spark.executor.memory` * `spark.memory.fraction`) / `spark.executor.cores`

【讨论】:

你确定每个核心只有一次吗?我认为它们被每个执行器复制一次,请参阅此资源:blog.cloudera.com/blog/2015/03/… 在以“Running tiny executors...”开头的句子中。你同意@user9070098 吗? 另外,如果是 执行内存 用于广播变量,那么 spark.executor.memory*spark.memory.fraction*(1-spark.memory.storageFraction) 将是我理解的限制,至少根据此资源:@987654322 @

以上是关于如何知道 pyspark 中广播变量的可用内存量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyspark中广播一个巨大的rdd?

在Flink中广播HashMap

Spark篇---Spark中广播变量和累加器

防止在 Pandas 中广播 [重复]

如何在自组织网络中广播?

如何在 em-websocket 中广播或建立连接?