将Jupyterhub + DockerSpawner + all-spark-notebook与现有的火花星团

时间:2017-11-09 03:31:59

标签: apache-spark jupyter-notebook jupyterhub jupyter-scala

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

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

我用谷歌搜索,发现有人扩展了所有火花笔记本码头图片并重新安装了Toree。

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

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

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 已将我的jupyterhub连接到远程火花簇。

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

连接到网络上的火花的更新

对于要连接到spark的docker容器,它必须以主机模式连接到网络 -

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

c.DockerSpawner.use_internal_ip = True 

c.DockerSpawner.network_name = 'host'

当多个容器尝试启动时,这将导致问题,因为所有容器都无法在主机模式下运行。要克服此问题,请将这些行添加到config -

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