如何隨時隨地進行云數(shù)據(jù)分析

一、為什么需要一個遠(yuǎn)程Jupyter服務(wù)

熟悉Python的同學(xué)應(yīng)該都知道Jupyter Notebook這一數(shù)據(jù)分析神器,它能幫助我們有效地組織輸入輸出,將我們探索數(shù)據(jù)的過程記錄下來,后續(xù)稍加整理便可以生成一篇報告或者博客。Jupyter Notebook支持Markdown,也支持Python、R甚至Julia等語言,完全可以支持一個數(shù)據(jù)工作者的大多數(shù)分析需求。

然而有一個問題可能困擾了很多人,那就是本地的Jupyter Notebook無法輕易地帶來帶去,性能也不一定有保障。考慮以下場景:

  • 小明在公司使用Jupyter Notebook做了一些分析,但是下班回家后還要繼續(xù)工作。家里的電腦跟公司的電腦環(huán)境不完全一致,同時公司的電腦是臺式機無法帶回家(或者懶得背筆記本回家);
  • 小明的筆記本是超極本,性能較弱,無法支持大數(shù)據(jù)分析的需求;
  • 小明在公司機器上使用Jupyter Notebook跑出了一份結(jié)果,但是他回家后需要查閱;
  • ……

當(dāng)你也面臨這些場景時,你就有必要考慮搭建一個可以遠(yuǎn)程訪問的Jupyter Notebook或者JupyterLab服務(wù)了。JupyterLab與Jupyter Notebook師出同源,可以憑個人愛好進行選擇。此次我們拿JupyterLab來進行演示。


歡迎大家關(guān)注我的個人博客【數(shù)洞】 【備用站】

二、快速搭建JupyterLab服務(wù)

首先,我們需要一臺服務(wù)器。BAT三家都有各自的云平臺,大家可以自行選擇采購,我的忠告是不要選擇小服務(wù)商,盡量選擇大平臺,小服務(wù)商的服務(wù)質(zhì)量良莠不齊,且生存情況我們也不清楚,為了保證自己的銀子不會消失,還是穩(wěn)妥一點選擇有靠譜背書的平臺,BAT三家的服務(wù)我都體驗過,大家可以放心使用,由于我日常使用的是在百度云的服務(wù)器上搭建的JupyterLab服務(wù),那么這次我就選擇使用騰訊云的另一臺服務(wù)器給大家做演示。

這臺服務(wù)器是Ubuntu,不過根據(jù)我的體驗,CentOS上也沒有什么分別。

首先我們登陸上我們的服務(wù)器:

# 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]
$

為了方便,小編通過一個腳本模擬登錄服務(wù)器的流程,這里邊使用了expect程序,這里貼出來給感興趣的同學(xué)用:

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

具體使用的過程中,需要將用戶名、服務(wù)器地址、密碼按實際情況替換,然后將腳本保存為一個你喜歡的名字,并賦予執(zhí)行權(quán)限、移動到環(huán)境變量$PATH所包含的目錄中去,比如小編就保存在/usr/local/bin目錄中。

接下來我們需要保證我們已經(jīng)安裝了Python/Python3,同時已經(jīng)安裝了對應(yīng)版本的JupyterLab/Jupyter Notebook,使用pip安裝Jupyter系列非常方便。

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

安裝完成之后,我們進入ipython中,來為我們的Jupyter服務(wù)配置密碼:

# 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:’開頭的這一串我們需要復(fù)制下來,一會兒配置的時候需要使用。而我們輸入的密碼就是我們在瀏覽器中登錄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設(shè)置為*,意味允許任何IP訪問
c.NotebookApp.ip = '*'
# 這里的密碼就是上邊我們生成的那一串
c.NotebookApp.password = u'sha1:1e39d24dcd6c:b265321ca0c4cb798888bcb69b0024983a8ac439'
# 服務(wù)器上并沒有瀏覽器可以供Jupyter打開
c.NotebookApp.open_browser = False
# 監(jiān)聽端口設(shè)置為8888或其他自己喜歡的端口
c.NotebookApp.port = 8888
# 我們可以修改jupyter的工作目錄,也可以保持原樣不變,如果修改的話,要保證這一目錄已存在
c.MappingKernelManager.root_dir = '/home/ubuntu/.jupyter_run/root'
# 允許遠(yuǎn)程訪問
c.NotebookApp.allow_remote_access = True

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

接下來輸入jupyter lab啟動jupyter服務(wù)即可:

$ 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
...

接下來我們打開瀏覽器測試以下,在地址欄中輸入服務(wù)器的地址,并訪問其8888端口(或自己設(shè)置的jupyter監(jiān)聽端口),如:0.0.0.0:8888:

image

可以看到,瀏覽器自動跳轉(zhuǎn)打開了我們搭建的JupyterLab服務(wù)。在這個過程里,需要輸入密碼,也就是我們自己設(shè)置并確認(rèn)的密碼。

接下來,我們導(dǎo)入matplotlib畫一個圖測試一下,完美。

到了這里問題還沒有結(jié)束,因為我們和服務(wù)器的連接會斷開,或者我們會關(guān)閉運行jupyter的這個窗口,這樣的話就相當(dāng)于殺死了Jupyter服務(wù),我們在別的地方就無法通過瀏覽器遠(yuǎn)程訪問了。有沒有什么好辦法能解決這個麻煩呢?

有,那就是使用強大的screen命令。screen命令可以讓我們開啟大量的窗口,并靈活控制每個窗口的開啟關(guān)閉、前臺后臺狀態(tài)。那么接下來,我們使用screen命令將Jupyter服務(wù)放置在后臺運行,這樣的話,及時我們本地的電腦關(guān)閉了或者斷開了與服務(wù)器的連接,我們搭建的Jupyter服務(wù)依然會正常運行。

我們使用screen命令新開一個窗口,并命名為jupyter(或其他你喜歡的名字):

$ screen -S jupyter

接下來,我們在新開的窗口中打開Jupyter Lab:

$ jupyter lab

程序運行起來之后,我們使用Ctrl + A + D的快捷鍵將這一窗口放入后臺,并回到開啟screen窗口之前的狀態(tài):

$ 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    # 其后可以通過指定窗口名打開特定窗口,默認(rèn)打開上一個使用的窗口

好了,這樣我們就可以隨時隨地訪問并愉快地使用我們的JupyterLab服務(wù)了,大家有問題可以留言在下方,隨時交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容