我的一个节点在我的spark群集中有24个核心和124Gb ram。当我将spark.executor.memory字段设置为4g,然后广播一个需要3.5gb存储在ram中的变量时,核心是否共同拥有该变量的24个副本?还是一份?
我正在使用pyspark - v1.6.2
答案 0 :(得分:7)
我相信PySpark不会使用任何形式的共享内存来共享工作者之间的广播变量。
在类Unix系统上,在守护进程的主函数中广播变量are loaded,该守护进程只能从守护进程调用after forking,因此无法从父进程空间访问。
如果你想在不使用外部服务的情况下减少大变量的占用空间,我建议使用带有内存映射的文件支持对象。这样您就可以有效地使用NumPy arrays。
相比之下,本机(JVM)Spark应用程序确实在单个执行程序JVM上的多个执行程序线程之间共享广播变量。