JupyterHub搭建

Jupyter是什么

Jupyter是一款基于python的web notebook服务,目前有大多python数据挖掘与机器学习爱好者使用这款服务,其特性其实与Ipytohn Notebook差不多,准确说Ipython Notebook是一款提供增强型交互的功能的shell,而Jupyter除了Ipython的功能,还加入了普通编辑器的通用功能,是一款带代码交互的动态文档web编辑器。

Jupyterhub

由于Jupyter只支持单用户的使用场景,作为一个可交互的web服务,只支持单用户模式实在让人难以理解。估计开发者也觉得这个问题太过鸡肋,于是Jupyterhub因有而生。

安装

  1. 安装依赖包:

    1
    2
    $ yum install sqlite-devel npm nodejs-legacy zlib-devel openssl-devel
    $ npm install -g configurable-http-proxy
  2. 安装py3:

    1
    2
    3
    4
    $ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
    $ tar zxvf Python-3.6.1.tgz
    $ ./configure --prefix=/usr/local/python36 --enable-loadable-sqlite-extensions
    $ make -j 20 && make altinstall
  3. Reset环境变量(可选,如果有py2环境需要操作):

    1
    $ export PYTHONPATH=''
  4. pip安装Jupyterhub:

    1
    $ pip3.6 install jupyterhub notebook -i https://pypi.douban.com/simple/

启动Jupyterhub

1
$ export PYTHONPATH='' && ./jupyterhub --ip 0.0.0.0 --port 8888

生成config文件

1
$ ./jupyterhub --generate-config

理论上到这步为止,jupyterhub安装完毕,可以顺利启动。

Kernel

Kernel可以理解为每个notebook运行的后台环境,Jupyterhub以及Jupyter虽然是基于python的application,但这并不意味着其notebook的功能只能为python环境使用,事实上Jupyter的强大就体现在此处,其可以支持任意环境的notebook,目前主流的数据科学环境基本都支持,R, SAS,SPARK等。

Anaconda Kernel安装

conda环境安装特别简单,首先确保anaconda环境已经集成了Ipython,默认是已经集成了。其次在用户级别下执行一下命令即可:

1
$ $your_anaconda_install_path/bin/ipython kernel install --user --name anaconda

执行完成后,便会在jupyterhub中看到名为anaconda的kernel,还是再重申下,这个命令需要在每个用户级别下local执行。new后便可使用anaconda环境中的所有python lib。

R Kernel安装

安装R Kernel之前需要安装r-irkernel,这步我们使用anaconda来安装:

1
$ conda install -c r r-irkernel

安装完毕之后,运行R命令:

1
IRkernel::installspec()

执行完成后,便可在jupyterhub中看到名为R的kernel。

使用

管理

作为多用户web应用,势必需要管理员的角色,管理员的配置在jupyterhub生成的config文件里面进行修改:

1
$ vim jupyterhub_config.py

修改如下:

1
c.Authenticator.admin_users = ('zhangsan','lisi')

然后重新启动jupyter,用以上配置的用户登录,即可使用管理功能。

用户认证

Jupyterhub支持多种认证方式:PAM和LDAP,默认使用的是PAM,即与系统用户层使用同一认证管理,用户名与密码与系统配置的相同。

由于比较懒,所以这里采用无密码登陆认证方式。

首先用py3安装一个插件

1
$ ./pip3.6 install jupyterhub-dummyauthenticator -i https://pypi.douban.com/simple/

然后,在配置文件中修改此配置:

1
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'

具体细节可以参考这个问题

另外,jupyterhub默认是不允许root组用户进行访问和使用,如果需要此类配置,需要修改源码 site-packages/jupyterhub/spawner.py,找到如下代码块,添加如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def get_args(self):
"""Return the arguments to be passed after self.cmd

Doesn't expect shell expansion to happen.
"""
args = []

if self.ip:
args.append('--ip="%s"' % self.ip)

if self.port:
args.append('--port=%i' % self.port)
elif self.server.port:
self.log.warning("Setting port from user.server is deprecated as of JupyterHub 0.7.")
args.append('--port=%i' % self.server.port)

if self.notebook_dir:
notebook_dir = self.format_string(self.notebook_dir)
args.append('--notebook-dir="%s"' % notebook_dir)
if self.default_url:
default_url = self.format_string(self.default_url)
args.append('--NotebookApp.default_url="%s"' % default_url)

if self.debug:
args.append('--debug')
if self.disable_user_config:
args.append('--disable-user-config')
args.append('--allow-root') ##添加此行代码,实现root访问与登陆
args.extend(self.args)
return args

Theme

其实Jupyterhub的主题已经非常简约唯美了,基本除了对风格有非常强的偏执一般不会care这样的theme。不过有一点,比较偏好使用暗色系的主题的用户,例如IDE用的是PyCharm Darcula的,可能会觉得不适应,这时候我们可以使用第三方package来实现这一点。

项目地址:jupyter-themes

安装:

1
$ pip install --upgrade jupyterthemes==0.17.3 -i https://pypi.douban.com/simple

需要注意,这个包有不少依赖,需要评估对其他lib的影响

安装theme,具体参数请参考官方文档:

1
$ jt -t chesterish -T -N -altp -fs 10 -nfs 11 -tfs 10

命令执行完成后,事实上会在所在用户的home folder下面的.jupyter文件夹内生成所需要的渲染和样式文件。而Jupyterhub启动后,面向每个用户的环境实际上是分别单独启动了一个Jupyter的web server,如下图。因此为了让主题生效,我们需要重启自己的Jupyter Server。

然后就可以使用新的主题。其实这里也可以发现,hub上面的渲染还是原来的明色系,这里的主题只会在server内生效。

Link to this post: JupyterHub搭建