我在一台机器上设置了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内核的参数吗?
答案 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