pyspark 执行程序节点上的 python 进程是否在 ram 中共享广播变量?
pyspark Do python processes on an executor node share broadcast variables in ram?
我的 spark 集群中有一个节点有 24 个内核和 124Gb 内存。当我将 spark.executor.memory 字段设置为 4g,然后广播一个需要 3.5gb 存储在 ram 中的变量时,内核会共同持有该变量的 24 个副本吗?还是一份?
我正在使用 pyspark - v1.6.2
我相信 PySpark 不使用任何形式的共享内存来在 worker 之间共享广播变量。
在类 Unix 系统上,守护进程广播变量 are loaded in the main function of the worker which is called only after forking,因此无法从父进程访问 space。
如果你想在不使用外部服务的情况下减少大变量的占用空间,我建议使用带有内存映射的文件支持对象。这样你就可以有效地使用例如 NumPy arrays.
相比之下,本机 (JVM) Spark 应用程序确实在单个执行程序 JVM 上的多个执行程序线程之间共享广播变量。
我的 spark 集群中有一个节点有 24 个内核和 124Gb 内存。当我将 spark.executor.memory 字段设置为 4g,然后广播一个需要 3.5gb 存储在 ram 中的变量时,内核会共同持有该变量的 24 个副本吗?还是一份?
我正在使用 pyspark - v1.6.2
我相信 PySpark 不使用任何形式的共享内存来在 worker 之间共享广播变量。
在类 Unix 系统上,守护进程广播变量 are loaded in the main function of the worker which is called only after forking,因此无法从父进程访问 space。
如果你想在不使用外部服务的情况下减少大变量的占用空间,我建议使用带有内存映射的文件支持对象。这样你就可以有效地使用例如 NumPy arrays.
相比之下,本机 (JVM) Spark 应用程序确实在单个执行程序 JVM 上的多个执行程序线程之间共享广播变量。