#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-исполнителе.