1

我在一台机器上设置了 JupyterHub + DockerSpawner + all-spark-notebook,并且我有一个现有的 spark 集群。

我可以登录并启动服务器,但是如何使笔记本(Toree)访问现有的火花集群?

我搜索了一下,发现有人扩展了 all-spark-notebook docker 映像并重新安装了 Toree。

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

有没有更简单的方法来实现目标?DockerSpawner 可以接受任何可以转移到 Toree 内核的参数吗?

4

1 回答 1

2

我面临着同样的问题。已将我的 jupyterhub 连接到远程火花集群。

以下是步骤 - 1. 在我的案例中,通过 docker 登录到 all-spark-notebook。2. 你会发现 spark 安装在 /usr/local/spark 3. 你必须改变 conf/spark-env.sh 和 spark-defaults.conf 指向你的集群主控

更新连接到网络上的火花

要使 docker 容器连接到 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
于 2017-11-30T15:37:44.083 回答