Содержание


Использование блокнотов для анализа данных в облаке

Как развернуть сервер IPython Notebook в контейнере Docker на платформе SoftLayer

Comments

IPython Notebook – это веб-среда для организации интерактивных вычислений и воспроизводимых исследований. В предыдущем руководстве я объяснил, как развернуть IPython Notebook на платформе IBM Bluemix™. Там я отметил, что хотя это быстро и легко, результат имеет свои ограничения (например, временное хранение данных и неконтролируемые перезагрузки).

Эти ограничения можно преодолеть, развернув сервер IPython Notebook на платформе SoftLayer. В этом руководстве рассматриваются следующие вопросы.

  1. Создание виртуальной машины (ВМ) SoftLayer с механизмом контейнера приложений Docker.
  2. Извлечение официального репозитория IPython из Docker Hub и запуск сервера IPython Notebook в контейнере.
  3. Загрузка и работа с опытным блокнотом, который анализирует данные о показателях своевременности вылетов авиакомпаний, полученные из Data.gov, открытого информационного сайта правительства США. Образец IPython Notebook
    Образец IPython Notebook

Что для этого нужно

  • Учетная запись SoftLayer. Можно получить бесплатную 30-дневную пробную подписку на SoftLayer.

Команда создания экземпляра ВМ SoftLayer принимает несколько аргументов, которые можно скопировать из этого примера и вставить в терминал.

Шаг 1. Запуск ВМ SoftLayer

Для начала создайте ВМ SoftLayer с механизмом Docker. Это можно сделать одним из двух способов. Те, кто предпочитает работать в командной строке и у кого установлен Python, могут заказать виртуальную машину с помощью CLI SoftLayer. Те же, кто привык к графической среде, могут заказать ВМ с помощью в веб-браузера на портале для клиентов SoftLayer.

Я опишу здесь метод командной строки. За инструкциями по заказу через портал обращайтесь к разделу «Создание ВМ» этой статьи.

Чтобы запустить виртуальную машину из командной строки, установите CLI SoftLayer с помощью одного из поддерживаемых методов, описанных в документации SoftLayer Python Client. Например, если у вас установлен pip и есть доступ с правами root на локальном компьютере, выполните следующую команду:

sudo pip install SoftLayer.

Затем настройте CLI со своими учетными данными, набрав sl config setup и ответив на вопросы:

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

Ваши учетные данные сохраняются локально в папке ~/.softlayer.

Теперь создайте пару ключей SSH, набрав ssh-keygen -t rsa и ответив на все вопросы. Сохраните ключ под именем 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

Теперь создайте экземпляр ВМ. Команда для создания экземпляра ВМ SoftLayer принимает несколько аргументов, которые можно скопировать из этого примера и вставить в свой терминал.

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 – читабельные идентификаторы вашей виртуальной машины. Они не соответствуют реальным записям DNS. Установите любые желаемые значения;
  • --key – обозначение открытого ключа SSH, которое вы присвоили ему при сохранении;
  • --cpu и --memory – ресурсы, выделяемые вашей виртуальной машине;
  • --os=UBUNTU_14_64 устанавливает на ваш экземпляр ВМ Ubuntu LTS 14.04;
  • --hourly указывает, что ВМ должна оплачиваться на почасовой основе (а не ежемесячно);
  • --d sea01 указывает, что ВМ должна быть создана в центре обработки данных в Сиэтле. (Команда sl vs create-options выводит список ближайших к вам центров обработки данных);
  • --postinstall указывает на простой bash-сценарий с использованием apt-get для установки последней версии Docker из Docker,Inc. (конечно, можно и нужно просмотреть содержание этого сценария, прежде чем положиться на него);
  • --wait задерживает команду на указанное количество секунд.

Эта команда выводит идентификатор виртуальной машины и ее состояние готовности:

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

Запрос к ВМ проверяет ее готовность и извлекает открытый 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:06:23-05:00     :
:              vlans : :.........:........:........: :
:                    : :   type  : number :   id   : :
:                    : :.........:........:........: :
:                    : :  PUBLIC :  782   : 605768 : :
:                    : : PRIVATE :  961   : 605770 : :
:                    : :.........:........:........: :
:....................:...............................:

Шаг 2. Извлечение образа Docker

Когда ВМ готова, используйте SSH для подключения к ее открытому IP-адресу и пройдите аутентификацию как пользователь с правами root с помощью ранее созданного секретного ключа или пароля, выданного SoftLayer для ВМ. Например, чтобы использовать секретный ключ, выполните команду:

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

Подключившись, выполните docker ps, чтобы проверить, что CLI docker установлен и демон Docker запущен.

Если вы получили сообщение об ошибке, возможно, что все еще выполняется сценарий ВМ postinstall. Подождите немного и повторите попытку.

Когда docker будет готов, извлеките официальный репозиторий Docker ipython/scipyserver из Docker Hub:

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 в контейнере;
  • -e записывает в переменную среды PASSWORD пароль, с которым вы вошли;
  • --restart настраивает демон Docker на перезапуск экземпляра контейнера всякий раз, когда он останавливается (например, при сборе или перезагрузке виртуальной машины);
  • ipython/scipyserver настраивает образ на использование в качестве отправной точки для контейнера.

Теперь откройте в веб-браузере адрес своей виртуальной машины с использованием протокола HTTPS (например, https://50.23.141.114). Так как вы используете самозаверяющий сертификат SSL, браузер предупредит вас, что ему не удается проверить удостоверение сервера. Для целей этого руководства можно спокойно продолжить. Если же вы планируете использовать сервер SoftLayer Notebook всерьез, то нужно получить настоящий SSL-сертификат.

Введите свои учетные данные. Затем убедитесь, что вы видите панель управления IPython Notebook.

Панель управления IPython Notebook
Панель управления IPython Notebook

Шаг 3. Загрузка примера блокнота

Чтобы помочь вам освоить свой новый сервер блокнотов, я создал пример, который отвечает на три вопроса о показателях своевременности вылета авиарейсов в США в июне 2014 года:

  • Каково распределение задержки вылета минимум на 15 минут по штатам? Задержки прибытия?
  • Существует ли какая-либо тенденция по задержке прибытия на 15 минут или более для рейсов между штатами?
  • Как меняется задержка прибытия день ото дня?

Блокнот подключается к базе данных Cloudant, которую я заполнил соответствующими данными из Data.gov. Затем он использует для преобразования и визуализации данных ряд пакетов Python для научных вычислений, установленных в образе ipython/scipyserver. Попутно он спрашивает мое мнение о данных и создает комментарии в формате HTML с помощью Markdown.

Чтобы получить блокнот, выполните следующие действия.

  1. Откройте только для чтения копию блокнота на сайте IPython NBViewer в новой вкладке или в новом окне браузера, посетив эту страницу.
  2. Щелкните на значке Download Notebook в верхнем правом углу страницы.
  3. Вернитесь на страницу панели управления сервера IPython Notebook.
  4. Найдите на странице фразу To import a notebook, drag the file onto the listing below or click here. и щелкните на словах click here.
  5. Найдите место, куда блокнот загрузился на вашем локальном компьютере, и выберите его для передачи.
  6. Когда увидите блокнот Exploration of Airline On-Time Performance.ipynb, щелкните на нем.

Блокнот должен открыться в новой вкладке браузера. В этой вкладке можно выбирать, выполнять и редактировать ячейки блокнота с помощью меню, кнопок панели инструментов или сочетаний клавиш, перечисленных в меню Help. Если вам интересны сведения об авиакомпаниях или вы заинтересовались средой IPython, найдите время, чтобы поиграть с блокнотом и исследовать данные самостоятельно.

Что делать дальше?

В этом руководстве мы создали сервер IPython Notebook в контейнере Docker на платформе SoftLayer. Вот некоторые идеи для тех, кто захочет пойти дальше.

  • Пример блокнота включает в себя различные предложения по дальнейшему изучению данных о показателях своевременности вылетов авиакомпаний. Можно решить одну или несколько из этих задач и поделиться результатами своей работы в виде нового блокнота.
  • IPython имеет встроенную поддержку параллельных и распределенных вычислений. Например, на вкладке Running панели управления блокнота можно запустить несколько рабочих процессов. Если экземпляр контейнера выполняется на виртуальной машине с несколькими процессорами, то эту функцию можно использовать для параллельной обработки блокнота.
  • Контейнер Docker содержит сервер IPython Notebook, работающий по умолчанию как корневой процесс. Если вы планируете запускать несколько экземпляров контейнера на одной и той же ВМ или в одной и той же учетной записи SoftLayer, то нужно запускать сервер как некорневой процесс или как-то иначе с учетом того, что в контейнерах пока не содержится.
  • Команда docker run, которую мы использовали, сохраняет блокноты в контейнере. Если вы хотите начать серьезную работу в своем экземпляре блокнота, то нужно рассмотреть стратегию резервного копирования, возможно, сохраняя блокноты в SoftLayer Object Store.

Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Облачные вычисления, Web-архитектура
ArticleID=1010678
ArticleTitle=Использование блокнотов для анализа данных в облаке
publish-date=07102015