如何知道 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.fraction
是 0.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 中广播变量的可用内存量?的主要内容,如果未能解决你的问题,请参考以下文章