Используйте Jupyterhub+DockerSpawner+all-spark-notebook с существующим искровым кластером.

Я настроил JupyterHub + DockerSpawner + all-spark-notebook на одной машине, и у меня есть существующий искровой кластер.

Я могу войти в систему и запустить сервер, но как заставить ноутбук (Toree) посетить существующий искровой кластер?

Я погуглил и нашел, что кто-то расширил образ докера all-spark-notebook и переустановил Toree.

https://github.com/jupyter/docker-stacks/wiki/Docker-Recipes#use-jupyterall-spark-notebooks-with-an-existing-sparkyarn-cluster

Есть ли более простые способы достижения цели? Может ли DockerSpawner принимать любые аргументы, которые можно передать ядру Toree?


person Grant    schedule 09.11.2017    source источник


Ответы (1)


Я столкнулся с той же проблемой. Подключил свой jupyterhub к удаленному искровому кластеру.

Вот шаги: 1. Войдите в all-spark-notebook в моем случае через докер. 2. Вы найдете искру, установленную в /usr/local/spark 3. Там вам нужно будет изменить conf/spark-env.sh и spark-defaults.conf, чтобы они указывали на ваш мастер кластера.

Обновление для подключения к spark в сети

Чтобы докер-контейнер мог подключиться к spark, он должен быть подключен в режиме хоста к сети —

c.DockerSpawner.extra_host_config = { 'network_mode': 'host' }

c.DockerSpawner.use_internal_ip = True 

c.DockerSpawner.network_name = 'host'

Это вызовет проблему, когда несколько контейнеров попытаются запустить, поскольку все они не могут работать в режиме хоста. Чтобы преодолеть это, добавьте эти строки в конфигурацию:

from jupyterhub.utils import random_port
from tornado import gen

class custom_spawner(DockerSpawner):
    @gen.coroutine
    def get_ip_and_port(self):
        return self.container_ip, self.container_port

    @gen.coroutine
    def start(self, *args, **kwargs):
        self.container_port = random_port()
        spawn_cmd = "sh /srv/singleuser/singleuser.sh --port={}".format(self.container_port)
        self.extra_create_kwargs.update({"command": spawn_cmd})

        # start the container
        ret = yield DockerSpawner.start(self, *args, **kwargs)
        return ret
person sat    schedule 30.11.2017
comment
мой искровой кластер находится в той же сети, что и хост jupyterhub, что означает, что док-контейнер (с внутренней сетью на хосте jupyterhub) не может получить доступ к сети - person Grant; 01.12.2017
comment
Вы также должны убедиться, что уступаете в get_ip_and_port-функции, иначе вы получите ошибку о фьючерсах в последних версиях Jupyter Hub. - person Blizz; 02.07.2019