为什么BroadcastExchange需要更多驱动内存?

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

广播时,Spark 可能会失败并出现错误

org.apache.spark.sql.errors.QueryExecutionErrors#notEnoughMemoryToBuildAndBroadcastTableError
(Spark 3.2.1):

enter image description here

为什么BroadcastExchange需要更多的驱动内存?如果广播的作用是向所有worker发送数据,为什么驱动程序内存是瓶颈?

谢谢。

apache-spark apache-spark-sql
1个回答
3
投票

不幸的是,Spark 尚不支持执行器端广播连接(请参阅SPARK-17556)。目前,广播数据集的所有数据首先收集在驱动程序中,以构建内存中的哈希表,然后将其分发给工作人员。这可能会给驱动程序带来较高的内存压力。

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