内容


在云中使用 IPython Notebook 开展出色的数据科学研究

在 SoftLayer 上的 Docker 中部署一个 IPython Notebook 服务器

Comments

IPython Notebook 是一个用于交互式计算和可再现研究的基于 Web 的环境。在 之前的一篇教程 中,我介绍了如何在 IBM® Bluemix™ 上运行 IPython Notebook。我曾经提到,尽管向 Bluemix 部署一个常备的 Notebook 服务器既快速又轻松,但这样做有其局限性(比如临时存储和不受控制的重新启动)。

通过将 IPython Notebook 服务器部署到 SoftLayer,可以克服这些限制。在本教程中,您将:

  1. 配备一个 SoftLayer 虚拟机 (VM),该虚拟机上包含 Docker(一个应用程序容器引擎)。
  2. Docker Hub 获取一个官方的 IPython 存储库,并在一个容器中运行 IPython Notebook 服务器。
  3. 随后上传并使用一个示例 Notebook,用该 Notebook分析来自 Data.gov(美国政府的开放数据站点)的航空公司正点情况数据。 一个示例 IPython Notebook 的屏幕截图,其中包含对来自 Data.gov 的航空公司正点情况数据的分析。
    一个示例 IPython Notebook 的屏幕截图,其中包含对来自 Data.gov 的航空公司正点情况数据的分析。

需要做的准备工作

创建 SoftLayer VM 实例的命令接受少量的参数,您可以从本示例将这些参数复制并粘贴到您自己的终端中。

第 1 步. 启动一个 SoftLayer VM

首先配备一个带有 Docker 的 SoftLayer VM。可以通过两种方式完成这项任务。如果喜欢使用命令行,而且已经安装了 Python,那么可以使用 SoftLayer CLI 订购一个 VM。如果在图形环境中工作,那么您还可以在 Web 浏览器中使用 SoftLayer 客户门户 订购一个 VM。

这里将描述命令行方法。有关通过门户订购的操作说明,请参阅这篇 博客文章 中的 “配备 VM” 一节。

要从命令行启动 VM,可以使用 SoftLayer Python Client 文档 中列出的某种受支持的方法来安装 SoftLayer CLI。例如,如果安装了 pip 并且拥有本地 PC 上的根用户访问权,那么可以运行以下代码:

sudo pip install SoftLayer

接下来,通过输入 sl config setup 并回答提示来为 CLI 配置您的凭据:

sl config setup
Username: parente
API Key or Password:******
Endpoint (public|private|custom): public

您的凭据会保留在本地的 ~/.softlayer 中。

现在,输入 ssh-keygen -t rsa 并回答所有提示来创建一个 SSH 密钥对。使用名称 dw-ipy 将该密钥保存在 ~/.ssh 文件夹中:

ssh-keygen -t rsa
Generating public/private rsa key pair.
# Enter file in which to save the key (/Users/parente/.ssh/id_rsa):/Users/parente/.ssh/dw-ipy
Enter passphrase (empty for no passphrase):******
# Enter same passphrase again:******
# Your identification has been saved in /Users/parente/.ssh/dw-ipy.
# Your public key has been saved in /Users/parente/.ssh/dw-ipy.pub.
# The key fingerprint is:
86:f4:c8:84:2f:15:52:74:b4:25:79:49:75:0e:9f:30 parente@localhost.local

将公钥存储在您 SoftLayer 帐户中的标签 dw-ipy 下:

sl sshkey add dw-ipy -f ~/.ssh/dw-ipy.pub
SSH key added:86:f4:c8:84:2f:15:52:74:b4:25:79:49:75:0e:9f:30

现在创建您的 VM 实例。创建命令会接受少量的参数,您可以从本例中将这些参数复制并粘贴到您自己的终端中:

sl vs create --hostname=ipython --domain=dw.ibm.com --key=dw-ipy --cpu=1 --memory=1024 --os=UBUNTU_14_64 --hourly --d sea01 --postinstall=https://bit.ly/1l2xaWE --wait=600

在命令参数中:

  • --hostname--domain 是您的 VM 的人类可读的标识符。它们与真正的 DNS 条目没有映射关系。您可以将它们设置为想要的任何值。
  • --key 必须是您分配给之前存储的 SSH 公钥的标签。
  • --cpu--memory 规定了分配给您的 VM 的资源。
  • --os=UBUNTU_14_64 将 Ubuntu LTS 14.04 安装在您的 VM 实例上。
  • --hourly 指示该 VM 应每小时(而不是每月)结算一次。
  • --d sea01 规定该 VM 应在西雅图数据中心中创建。(您可以运行 sl vs create-options 获得离您最近的数据中心列表。)
  • --postinstall 指向一段简单的 hash 脚本,该脚本使用 apt-get 安装来自 Docker, Inc 的最新 Docker 版本。(当然,在信任该脚本之前,应该检查它的内容。)
  • --wait 组织该命令指定的秒数,然后再返回。

命令返回时,会打印 VM 的 ID 及其准备状态:

:.........:......................................:
: name : value :
:.........:......................................:
: id : 6229756 :
: created : 2014-09-17T21:04:38-05:00 :
: guid : 506e3de8-6b86-47cc-8830-17e27141424c :
: ready : True :
:.........:......................................:

查询该 VM,确保已准备好此 VM,并获得用于连接它的公共 IP 地址:

sl vs detail VM ID

例如:

sl vs detail 6229756

: ...................:...............................:
: Name : Value :
:....................:...............................:
: id : 6229756 :
: hostname : ipython.dw.ibm.com :

: status : Active :
: active_transaction : - :
: state : Running :
: datacenter : sea01 :
: os : Ubuntu :
: os_version : 14.04-64 Minimal for VSI :
: cores : 1 :
: memory : 1G :
: public_ip : 50.23.141.114 :
: private_ip : 10.28.164.13 :
: private_only : False :
: private_cpu : False :
: created : 2014-09-17T21:04:38-05:00 :
: modified : 2014-09-17T21:6:23-05:00 :
: vlans : :.........:........:........: :
: : : type : number : id : :
: : :.........:........:........: :
: : : PUBLIC : 782 : 605768 : :
: : : PRIVATE : 961 : 605770 : :
: : :.........:........:........: :
:....................:...............................:

第 2 步. 获取 Docker 镜像

您的 VM 准备好后,使用 SSH 连接到它的公共 IP,并使用之前生成的私钥或 SoftLayer 分配给该 VM 的密码来验证它为 root 用户。例如,要使用您的私钥,可以运行:

ssh -i ~/.ssh/dw-ipy root@50.23.141.114

在建立连接后,运行 docker ps 检查 docker CLI 是否已安装和 Docker 后台进程是否在运行。

如果获得一个错误,那么 VM 安装后脚本可能仍在运行。请等待片刻之后再试。

docker 可用时,可以从 Docker Hub 获取官方的 ipython/scipyserver Docker 存储库:

docker pull ipython/scipyserver

在存储库层完成下载后,启动一个容器实例:

docker run -d -p 443:8888 -e PASSWORD=$( read -p "Password:" -s PASSWORD && echo $PASSWORD ) --restart always ipython/scipyserver

run 命令的参数执行以下操作:

  • -d 在后台运行该容器。
  • -p 将主机端口 443 映射到容器中的端口 8888。
  • -ePASSWORD 环境变量设置为您输入的密码。
  • --restart 告诉 Docker 后台进程,只要容器实例停止就重新启动它(例如,在发生意外崩溃或 VM 重新启动时)。
  • ipython/scipyserver 指定要用作容器的起点的镜像。

现在,我们要在 Web 浏览器中使用 HTTPS 协议访问您 VM 的地址(例如 https://50.23.141.114)。因为您使用了一个自签名 SSH 证书,所以您的浏览器回警告您,服务器身份无法验证。出于本教程的用途,您可以继续操作,无需担忧。如果计划认真地使用 SoftLayer Notebook 服务器,那么您应该获得一个真正的 SSH 证书。

在提示时输入您的凭据。然后,确认您可以看到 IPython Notebook 仪表板:

IPython Notebook 仪表板的屏幕截图
IPython Notebook 仪表板的屏幕截图

第 3 步. 下载示例 Notebook

为了帮助您练习新的 Notebook 服务器,我创建了一个示例 Notebook,它设想了 3 个有关 2014 年 6 月美国航班的正点情况的问题:

  • 起飞晚点至少 15 分钟的航班的分布情况是什么?到达晚点呢?
  • 是否有航班从一种状态转变为另一种状态,经历晚点 15 分钟或更长时间的情况?
  • 每天的到达晚点有何不同?

该 Notebook 连接到一个 Cloudant 数据库,我在该数据库中填充了来自 Data.gov 的相关数据。然后,它继续使用 ipython/scipyserver 镜像中安装的一些 Python 科学计算包,转换并可视化该数据。在此过程中,它捕获了我对该数据的想法,并生成一种呈现为 HTML 的 Markdown 格式注释。

要获得该 Notebook:

  1. 在新浏览器选项卡或窗口中,访问 此页面 打开 IPython NBViewer 站点上的 Notebook的只读副本。
  2. 单击页面右上角的 Download Notebook 图标。
  3. 返回到您的 IPython Notebook 服务器的仪表板页面。
  4. 找到页面上显示 To import a notebook, drag the file onto the listing below or click here. 的地方,单击显示 click here 的地方。
  5. 在本地 PC 上找到下载的 Notebook并选择它来进行上传。
  6. 在看到 Exploration of Airline On-Time Performance.ipynb Notebook时单击它。

该 Notebook会在浏览器中的一个新选项卡中打开。在此选项卡中,可以使用菜单选项、工具栏按钮或帮助菜单中列出的键盘快捷键来导航、执行和编辑 Notebook单元。如果您对航空公司数据感兴趣,或者发现 IPython 环境很有趣,那么您可以花费一些时间自信地使用该 Notebook并分析该数据。

继续探索

在本教程中,您在 SoftLayer 上的一个 Docker 容器中运行了一个 IPython Notebook 服务器。如果您想继续练习,以下是一些练习方法。

  • 示例 Notebook包含有关进一步分析航空公司正点情况数据的各种建议。您可以处理一个或多个建议,并以新 Notebook的形式分享您的工作。
  • IPython 拥有对并行和分布式计算的内置支持。例如,如果访问您 Notebook的仪表板中的 Running 选项卡,那么可以启动多个工作进程。如果在一个具有多个 CPU 的 VM 上运行一个容器实例,那么可以使用此特性并行化一个 Notebook中的工作。
  • 您的 Docker 容器默认以根用户身份运行 IPython Notebook 服务器。如果计划在同一个 VM 上或者可能在同一个 SoftLayer 帐户中运行许多容器实例,那么应该考虑以非根用户身份运行该服务器,否则您将面临着 仍无法包含容器 的事实。
  • 您使用的 docker run 命令会将您的 Notebook存储在容器中。如果开始在 Notebook实例中做一些严肃的工作,那么应该考虑对您的工作使用一个备份策略,或许可以将 Notebook存储在 SoftLayer Object Store 中。

相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Web development
ArticleID=1000724
ArticleTitle=在云中使用 IPython Notebook 开展出色的数据科学研究
publish-date=03172015