什么是Jupyter
Jupyter Notebooks 是一款开源的网络应用,我们可以将其用于创建和共享代码与文档。他提供了一个在线平台,你可以在其中编写你的代码、运行代码、查看输出、可视化数据并查看结果。这个工具在数据科学/机器学习领域被广泛应用,但是我觉得用来作为系统演示、系统的性能监测也是一个很不错的工具!下面我会在接下来的文章里使用jupyter对Ceph的性能进行实时监测以及可视化,本篇主要介绍如何安装Jupyter,以及如何进行相关的配置。
安装Jupyter
在Centos等Linux系统中使用pip命令(python 2)很容易安装jupyter:
pip install ipython jupyter notebook
安装如果遇到问题,请查看最后一节:问题总结。
配置远程登录
由于我是在服务器上对Ceph进行性能测试,所以我希望能远程访问,下面进行远程访问的配置,首先运行下面的命令产生配置文件:
jupyter notebook --generate-config
为了比较安全的访问服务器资源,我们需要设置登录密码和设置https来实现安全登录。如果有条件可以通过安全认证中心来发放秘钥和认证。首先打开ipython,生成sha1的密码,命令如下:
from notebook.auth import passwd
passwd()
设置好密码之后会产生一个密钥:
Enter password:
Verify password:
Out[2]: 'sha1:1b4ea9662b35:3e3d6a821d264d466f125a0939623c05e7b66007'
然后打开配置文件的路径,进行相应的设置,记得取消注释:
c.NotebookApp.password = 'sha1:'
c.NotebookApp.port = 8888
# 如果使用'*'可能会出现问题
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
安装完成之后,启动jupyter,然后在浏览器中输入服务器地址以及":port"即可使用。
安装插件管理器
安装插件:
python -m pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user --skip-running-check
安装好之后,重新刷新或重启jupyter,即可看到插件管理器的菜单Nbextension:
打开该菜单,可以看到里面各种各样的菜单,勾选即可安装:
这篇文章总结了那些比较实用的插件:https://www.jiqizhixin.com/articles/2018-12-20-12。
问题总结
安装出现编码错误
在安装Jupyter之后,出现了下面的问题:
在python2.7环境下,安装jupyter notebook后,输入下面的命令之后,打开jupyter失败:
jupyter notebook
错误log如下:
The Jupyter HTML Notebook.
这将启动一个基于tornado的HTML笔记本服务器,它提供一个html5/
javascript笔记本客户端。
Traceback (most recent call last):
File "/anaconda2/envs/python3/bin/jupyter-notebook", line 11, in
sys.exit(main())
File "/anaconda2/envs/python3/lib/python2.7/site-packages/jupyter_core/application.py", line 266, in launch_instance
return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
File "/anaconda2/envs/python3/lib/python2.7/site-packages/traitlets/config/application.py", line 657, in launch_instance
app.initialize(argv)
File "", line 2, in initialize
File "/anaconda2/envs/python3/lib/python2.7/site-packages/traitlets/config/application.py", line 89, in catch_config_error
app.print_help()
File "/anaconda2/envs/python3/lib/python2.7/site-packages/traitlets/config/application.py", line 385, in print_help
self.print_subcommands()
File "/anaconda2/envs/python3/lib/python2.7/site-packages/traitlets/config/application.py", line 377, in print_subcommands
print(os.linesep.join(lines))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 4: ordinal not in range(128)
Google后参考github上的一个issue,https://github.com/jupyterlab/jupyterlab/issues/5345,看到有人切换语言解决问题的:
LANG=zn jupyter notebook
于是在.bashrc文件中添加:
alias jupyter='LANG=zn jupyter'
插件管理器依赖错误
在安装插件管理器时同样遇到了问题:
python -m pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user --skip-running-check
出现six版本过低,于是使用pip安装指定版本:
pip install six==1.12.0
下一篇我讲介绍如何在Ceph中应用Jupyter。
参考资料
- Jupyter notebook extensions 扩展插件的安, https://blog.csdn.net/dyw_666666/article/details/81122095
- Jupyter打开出错:'ascii' codec can't decode byte 0xe5 in position 4: ordinal not in range(128), https://www.jianshu.com/p/516eb2a57ee6
- pip install 安装指定版本的包, https://blog.csdn.net/youcharming/article/details/51073911
- 基于CentOS7安装Jupyter Notebook, https://blog.csdn.net/qq_16149777/article/details/82455287
- 设置 jupyter notebook 可远程访问, https://blog.csdn.net/simple_the_best/article/details/77005400
- jupyter throwing error: socket.gaierror: [Errno -2] Name or service not known, https://stackoverflow.com/questions/52706238/jupyter-throwing-error-socket-gaierror-errno-2-name-or-service-not-known
- jupyter使用教程, https://www.zhihu.com/question/59392251