如何随时随地进行云数据分析

一、为什么需要一个远程Jupyter服务

熟悉Python的同学应该都知道Jupyter Notebook这一数据分析神器,它能帮助我们有效地组织输入输出,将我们探索数据的过程记录下来,后续稍加整理便可以生成一篇报告或者博客。Jupyter Notebook支持Markdown,也支持Python、R甚至Julia等语言,完全可以支持一个数据工作者的大多数分析需求。

然而有一个问题可能困扰了很多人,那就是本地的Jupyter Notebook无法轻易地带来带去,性能也不一定有保障。考虑以下场景:

  • 小明在公司使用Jupyter Notebook做了一些分析,但是下班回家后还要继续工作。家里的电脑跟公司的电脑环境不完全一致,同时公司的电脑是台式机无法带回家(或者懒得背笔记本回家);
  • 小明的笔记本是超极本,性能较弱,无法支持大数据分析的需求;
  • 小明在公司机器上使用Jupyter Notebook跑出了一份结果,但是他回家后需要查阅;
  • ……

当你也面临这些场景时,你就有必要考虑搭建一个可以远程访问的Jupyter Notebook或者JupyterLab服务了。JupyterLab与Jupyter Notebook师出同源,可以凭个人爱好进行选择。此次我们拿JupyterLab来进行演示。


欢迎大家关注我的个人博客【数洞】 【备用站】

二、快速搭建JupyterLab服务

首先,我们需要一台服务器。BAT三家都有各自的云平台,大家可以自行选择采购,我的忠告是不要选择小服务商,尽量选择大平台,小服务商的服务质量良莠不齐,且生存情况我们也不清楚,为了保证自己的银子不会消失,还是稳妥一点选择有靠谱背书的平台,BAT三家的服务我都体验过,大家可以放心使用,由于我日常使用的是在百度云的服务器上搭建的JupyterLab服务,那么这次我就选择使用腾讯云的另一台服务器给大家做演示。

这台服务器是Ubuntu,不过根据我的体验,CentOS上也没有什么分别。

首先我们登陆上我们的服务器:

# dain @ daindeMacBook-Pro in ~ [19:36:35]
$ sshtc
spawn ssh ubuntu@0.0.0.0
ubuntu@0.0.0.0's password:
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-134-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
New release '18.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Thu Sep 20 16:13:26 2018 from 0.0.0.0

# ubuntu @ VM-0-16-ubuntu in ~ [19:36:38]
$

为了方便,小编通过一个脚本模拟登录服务器的流程,这里边使用了expect程序,这里贴出来给感兴趣的同学用:

#!/usr/bin/expect -f
spawn ssh ${USER_NAME}@${YOUR_HOST}
set timeout 30
match_max 100000
expect "*password*"
send -- "${YOUR_PASSWORD}\n"
interact

具体使用的过程中,需要将用户名、服务器地址、密码按实际情况替换,然后将脚本保存为一个你喜欢的名字,并赋予执行权限、移动到环境变量$PATH所包含的目录中去,比如小编就保存在/usr/local/bin目录中。

接下来我们需要保证我们已经安装了Python/Python3,同时已经安装了对应版本的JupyterLab/Jupyter Notebook,使用pip安装Jupyter系列非常方便。

# ubuntu @ VM-0-16-ubuntu in ~ [20:00:33]
$ pip3 install jupyter jupyterlab

安装完成之后,我们进入ipython中,来为我们的Jupyter服务配置密码:

# ubuntu @ VM-0-16-ubuntu in ~ [20:02:19] C:127
$ ipython3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
Type "copyright", "credits" or "license" for more information.

IPython 2.4.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:1e39d24dcd6c:b265321ca0c4cb798888bcb69b0024983a8ac439'

上边的输出中,‘sha1:’开头的这一串我们需要复制下来,一会儿配置的时候需要使用。而我们输入的密码就是我们在浏览器中登录Jupyter时需要输入的。

接下来我们生成Jupyter配置文件并使用vim打开:

# ubuntu @ VM-0-16-ubuntu in ~ [20:04:51]
$ jupyter lab --generate-config
Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.

# ubuntu @ VM-0-16-ubuntu in ~ [20:04:59]
$ vim /home/ubuntu/.jupyter/jupyter_notebook_config.py

我们看到了一大串的配置选项,一入眼就有点懵了。不要慌,我们只需要修改其中的四行即可。我们使用vim的快捷键/来搜索以下几项,将他们之前的注释去掉,并按照如下配置修改。

# 将ip设置为*,意味允许任何IP访问
c.NotebookApp.ip = '*'
# 这里的密码就是上边我们生成的那一串
c.NotebookApp.password = u'sha1:1e39d24dcd6c:b265321ca0c4cb798888bcb69b0024983a8ac439'
# 服务器上并没有浏览器可以供Jupyter打开
c.NotebookApp.open_browser = False
# 监听端口设置为8888或其他自己喜欢的端口
c.NotebookApp.port = 8888
# 我们可以修改jupyter的工作目录,也可以保持原样不变,如果修改的话,要保证这一目录已存在
c.MappingKernelManager.root_dir = '/home/ubuntu/.jupyter_run/root'
# 允许远程访问
c.NotebookApp.allow_remote_access = True

好了,保存输入:wq退出vim。

接下来输入jupyter lab启动jupyter服务即可:

$ jupyter lab --allow-root
[W 20:23:23.497 LabApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 20:23:23.498 LabApp] The port 8888 is already in use, trying another port.
[I 20:23:23.510 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.6/site-packages/jupyterlab
...

接下来我们打开浏览器测试以下,在地址栏中输入服务器的地址,并访问其8888端口(或自己设置的jupyter监听端口),如:0.0.0.0:8888:

image

可以看到,浏览器自动跳转打开了我们搭建的JupyterLab服务。在这个过程里,需要输入密码,也就是我们自己设置并确认的密码。

接下来,我们导入matplotlib画一个图测试一下,完美。

到了这里问题还没有结束,因为我们和服务器的连接会断开,或者我们会关闭运行jupyter的这个窗口,这样的话就相当于杀死了Jupyter服务,我们在别的地方就无法通过浏览器远程访问了。有没有什么好办法能解决这个麻烦呢?

有,那就是使用强大的screen命令。screen命令可以让我们开启大量的窗口,并灵活控制每个窗口的开启关闭、前台后台状态。那么接下来,我们使用screen命令将Jupyter服务放置在后台运行,这样的话,及时我们本地的电脑关闭了或者断开了与服务器的连接,我们搭建的Jupyter服务依然会正常运行。

我们使用screen命令新开一个窗口,并命名为jupyter(或其他你喜欢的名字):

$ screen -S jupyter

接下来,我们在新开的窗口中打开Jupyter Lab:

$ jupyter lab

程序运行起来之后,我们使用Ctrl + A + D的快捷键将这一窗口放入后台,并回到开启screen窗口之前的状态:

$ screen -S jupyter
[detached from 29957.jupyter]

我们也可以查看目前都有哪些窗口在后台运行:

$ screen -ls
There is a screen on:
    48155.jupyter   (Detached)
1 Socket in /var/run/screen/S-root.

想要返回我们刚才使用的screen窗口,可以这样:

$ screen -r    # 其后可以通过指定窗口名打开特定窗口,默认打开上一个使用的窗口

好了,这样我们就可以随时随地访问并愉快地使用我们的JupyterLab服务了,大家有问题可以留言在下方,随时交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容