我是Spark的新手,我试图了解使用单一包装器使用broadcast var有什么好处。 我知道Spark还尝试使用高效的广播算法来分发广播变量以降低通信成本 - 但我们假设这种情况在长期存在的应用程序中发生一次,因此不是开销。
每个任务都会持有singelton的副本还是只有执行者本身的副本?
我试图理解它如何与单身人士合作并将其与广播进行比较。
如果这个问题重演,请告诉我,因为我没有找到答案。
答案 0 :(得分:0)
每个任务都会持有singelton的副本还是只有执行者本身的副本?
每个worker保留一个广播变量的缓存副本。需要访问广播变量的所有任务都会查询驻留在该工作者上的相同副本。是的,它是每个工作者的单个副本,但不是JVM级别的单个副本,因为它的生命周期由BroadcastManager
和ContextCleaner
管理。
这本书在这里很精彩地描述了它https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-broadcast.html看看那个图中描述的有多好。