pyspark Используют ли процессы python на узле-исполнителе широковещательные переменные в ОЗУ?

#python #apache-spark #pyspark #shared-memory

#python #apache-spark #pyspark #разделяемая память

Вопрос:

У меня есть узел с 24 ядрами и 124 ГБ ОЗУ в моем кластере spark. Когда я установлю для поля spark.executor.memory значение 4g, а затем передам переменную, для хранения которой в ОЗУ требуется 3,5 ГБ, будут ли ядра коллективно содержать 24 копии этой переменной? Или одна копия?

Я использую pyspark — v1.6.2

Ответ №1:

Я считаю, что PySpark не использует какую-либо форму общей памяти для обмена широковещательными переменными между рабочими.

В Unix-подобных системах широковещательные переменные загружаются в основную функцию worker, которая вызывается только после разветвления из демона, поэтому они недоступны из пространства родительского процесса.

Если вы хотите уменьшить объем больших переменных без использования внешней службы, я бы рекомендовал использовать объекты с поддержкой файлов с картой памяти. Таким образом, вы можете эффективно использовать, например, массивы NumPy.

Напротив, собственные (JVM) приложения Spark действительно совместно используют широковещательные переменные между несколькими потоками-исполнителями в одной JVM-исполнителе.