Увеличьте количество исполнителей в jupyter/pyspark-notebook

Я работаю над проектом с pyspark, который требует большего количества исполнителей. В настоящее время я использую этот очень удобный образ (jupyter/pyspark-notebook), который автоматически создает блокнот Jypyter с pyspark. Это действительно легко использовать.

Моя проблема в том, что этот образ создает только одного исполнителя - память для хранения всего 434,4 МБ.

Есть ли способ создать больше исполнителей для этого образа докера?

Я нашел в Интернете много docker-compose, которые создают больше исполнителей, но они как бы делают все с нуля. Я думаю, что делать все с нуля выглядит как переутомление, поскольку этот образ прекрасно работает, но я открыт для этого, если нет быстрого обходного пути.

Это мой файл для создания докеров:

jupyter:
  container_name: jupyter_pyspark
  build: .
  ports: 
    - "8888:8888"
    - "4040:4040"
    - "4041:4041"
  environment: 
    - JUPYTER_ENABLE_LAB=yes
  volumes: 
    - ./work:/home/jovyan/work
  hostname: localhost
  command: "start-notebook.sh --NotebookApp.token='' --NotebookApp.password=''"

А это мой Dockerfile:

FROM jupyter/pyspark-notebook

# Change to root user to install java 8
USER root
  
# Install requirements
# COPY requirements.txt ./
# RUN pip3 install -r requirements.txt

# RUN rm -rf requirements.txt

EXPOSE 8088 8042 4040

USER $NB_UID

OBS: я пытался изменить переменные конфигурации, но безуспешно. Я думаю, мне придется создать больше приложений в docker-compose, но я не знаю, как подключить их к этому образу.

from pyspark.sql import SparkSession
import pyspark.sql.functions as f
from pyspark.sql.types import *

spark = SparkSession \
            .builder \
            .config(conf=sparkConf) \
            .master("local[*]") \
            .appName("appYou") \
            .getOrCreate()
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы работаете с master local[*], вы запускаете только одну JVM, которая будет содержать функции драйвера и исполнителя. Это означает, что понятие драйвера/исполнителя в данном случае несколько расплывчато. Вы не сможете запустить несколько экзекьюторов: все будет происходить внутри одного драйвера.

Но вы все еще можете увеличить свою память! Чтобы увеличить его память, вам нужно изменить параметры конфигурации spark.driver.memory.

Вы можете сделать это несколькими способами, как описано в этом ответе SO.

Очень красивое объяснение. Спасибо. Кстати, есть ли разница в использовании спарка с 4г памяти против спарка с двумя рабочими по 2г? Просто чтобы лучше понять, стоит ли мне попробовать один из форматов искр, которые я нашел у рабочих. Я узнал, что разделение работы с рабочими ускоряет работу. Но я не уверен, предполагается ли использовать эту концепцию только с несколькими машинами или разделение локальной памяти на несколько рабочих облегчит задачу.

Cristian Favaro Carriço 04.04.2023 01:18

Кстати, @Koedlt, я думаю, что конфигурация («spark.driver.memory») должна идти до определения SparkSession. Я получил ошибку из-за этого. Просто добавьте это перед conf: conf = SparkConf() и conf.set("spark.driver.memory", '4g')

Cristian Favaro Carriço 04.04.2023 02:25

Аааа да это действительно так! Некоторые конфигурации нельзя изменить после запуска сеанса Spark. Я отредактирую свой ответ :) Спасибо, что сообщили мне!

Koedlt 04.04.2023 14:30

Чтобы ответить на ваш вопрос о 4 г памяти против 2 г каждый: это будет зависеть от вашего случая, но если у вас одинаковое общее количество ядер, у вас будет меньше накладных расходов на связь с меньшим количеством исполнителей. Если вы работаете на одной машине (то есть не в физических кластерах), я бы просто рекомендовал использовать мастер local[*], и тогда все находится внутри 1 JVM (опять же, меньше затрат на связь).

Koedlt 04.04.2023 14:36

Другие вопросы по теме