Запуск Spark, Python и Jupyter Notebook на Amazon EC2

Пошаговое руководство по настройке PySpark для работы с Jupyter Notebook на экземпляре Amazon EC2.

Привет! Меня зовут Хосе Портилья, и я обучаю более 200 000 студентов программированию, науке о данных и машинному обучению на Udemy! Вы можете ознакомиться со всеми моими курсами здесь.

Если вы заинтересованы в изучении Python для науки о данных и машинного обучения, прочтите мой курс здесь. (Я также преподаю Веб-разработка с полным стеком с помощью Django!)

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

Шаг 1. Создайте инстанс Amazon EC2

Для простоты мы будем использовать микро-экземпляр уровня бесплатного пользования с Ubuntu 64x. Используйте все настройки по умолчанию, кроме установки All Traffic вместо SSH при редактировании Security экземпляра. Это руководство можно расширить до нескольких экземпляров или более крупных экземпляров.

Шаг 2: подключитесь к этому экземпляру по SSH (Windows)

Для пользователей Windows вам необходимо использовать PuTTY. У Amazon действительно хороший набор инструкций, расположенный здесь. Следуйте этим инструкциям до точки подключения к консоли Ubuntu.

Шаг 3: подключитесь к этому экземпляру по SSH (Linux / Mac OS)

Клиент SSH уже встроен в Mac и Linux (обычно). Вы можете просто ввести простую команду ssh в свой экземпляр EC2, используя загруженный вами файл .pem. У Amazon также есть инструкции по этому поводу здесь.

Теперь вы должны успешно подключиться к командной строке вашего виртуального экземпляра Ubuntu, работающего на EC2. Остальная часть руководства расскажет вам, какие команды нужно вводить в этот терминал.

Шаг 4: Загрузите и установите Anaconda

Затем мы загрузим и установим Anaconda для нашего Python. Вы можете заменить здесь номера версий на любую версию, которую вы предпочитаете (2 или 3).

$ wget http://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86_64.sh
$ bash Anaconda3–4.1.1-Linux-x86_64.sh

Нажмите Enter в лицензионных соглашениях, затем введите да, чтобы принять, затем еще раз Enter, чтобы принять расположение по умолчанию.

Шаг 5. Проверьте, какой Python вы используете.

Ubuntu уже поставляется с Python, но давайте убедимся, что мы используем версию Anaconda. Использовать:

$ which python

Скорее всего, вы не будете использовать версию Python для Anaconda (это можно определить, проверив вывод команды which python). Перейдите на версию Python для Anaconda, указав свой источник, используя:

$ source .bashrc

Затем подтвердите:

$ which python

Или вы можете просто ввести python и проверить.

Шаг 6. Настройте блокнот Jupyter

Jupyter поставляется с Anaconda, но нам нужно будет настроить его, чтобы использовать его через EC2 и подключаться к SSH. Идите вперед и создайте файл конфигурации для Jupyter, используя:

$ jupyter notebook --generate-config

Шаг 7. Создайте сертификаты

Мы также можем создавать сертификаты для наших подключений в виде файлов .pem. Выполните следующее:

$ mkdir certs
$ cd certs
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

После ввода последней строчки вам зададут несколько общих вопросов. Просто заполните их общей информацией.

Шаг 8: отредактируйте файл конфигурации

Затем нам нужно закончить редактирование файла конфигурации Jupyter, который мы создали ранее. Измените каталог на:

$ cd ~/.jupyter/

Затем мы воспользуемся визуальным редактором (vi) для редактирования файла. Тип:

$ vi jupyter_notebook_config.py

Вы должны увидеть кучу закомментированного кода Python, здесь вы можете либо раскомментировать строки, либо добавить свои собственные (такие вещи, как добавление защиты паролем, являются здесь вариантом). Мы сохраним простоту.

Нажмите i на клавиатуре, чтобы активировать -ВСТАВИТЬ-. Затем вверху типа файла:

c = get_config()

# Notebook config this is where you saved your pem cert
c.NotebookApp.certfile = u'/home/ubuntu/certs/mycert.pem' 
# Run on all IP addresses of your instance
c.NotebookApp.ip = '*'
# Don't open browser by default
c.NotebookApp.open_browser = False  
# Fix port to 8888
c.NotebookApp.port = 8888

После того, как вы ввели / вставили этот код в файл конфигурации, нажмите Esc, чтобы остановить вставку. Затем введите двоеточие :, а затем введите wq, чтобы написать и выйти из редактора.

Шаг 9. Убедитесь, что Jupyter Notebook работает

Теперь вы можете проверить, работает ли блокнот jupyter. В консоли ubuntu введите:

$ jupyter notebook

Вы увидите вывод о том, что блокнот jupyter работает со всеми IP-адресами на порту 8888. Откройте свой собственный веб-браузер (рекомендуется Google Chrome) и введите свой общедоступный DNS для своего экземпляра Amazon EC2, а затем введите: 8888. Он должен быть в виде:

https://ec2-xx-xx-xxx-xxx.us-west-2.compute.amazonaws.com:8888

После того, как вы введете это в свой браузер, вы, вероятно, получите предупреждение о ненадежном сертификате, нажмите на него и подключитесь в любом случае, вы доверяете сайту. (Надеюсь, в конце концов, это вы сделали!)

Вы должны увидеть, как Jupyter Notebook работает на вашем экземпляре EC2. Большой! Теперь нам нужно вернуться и установить Scala, Java, Hadoop и Spark в том же экземпляре, чтобы PySpark работал правильно. Используйте Crtl-C в консоли EC2 Ubuntu, чтобы убить процесс Jupyter Notebook. Очистите консоль, нажав очистить, и перейдите к следующим шагам по установке Spark.

Шаг 10: установите Java

Затем нам нужно установить Java, чтобы установить Scala, который нам нужен для Spark. Вернувшись в командную строку EC2, введите:

$ sudo apt-get update

Затем установите Java с помощью:

$ sudo apt-get install default-jre

Убедитесь, что он работал с:

$ java -version

Шаг 11: установите Scala

Теперь мы можем установить Scala:

$ sudo apt-get install scala

Убедитесь, что он работал с:

$ scala -version

(Необязательно: вы можете установить определенные версии Scala следующим образом, просто замените номера версий):

$ wget http://www.scala-lang.org/files/archive/scala-2.11.8.deb
$ sudo dpkg -i scala-2.11.8.deb

Шаг 12: установите py4j

Нам нужно установить библиотеку python py4j, для этого нам нужно убедиться, что установка pip связана с нашей установкой Python в Anaconda, а не с Ubuntu по умолчанию. В консоли экспортируем путь для pip:

$ export PATH=$PATH:$HOME/anaconda3/bin

Затем используйте conda для установки pip:

$ conda install pip

Убедитесь, что правильный пункт используется с:

$ which pip

Теперь мы можем установить py4j с помощью pip:

$ pip install py4j

Шаг 13: установите Spark и Hadoop

Для загрузки и установки Spark и Hadoop используйте следующее:

$ wget http://archive.apache.org/dist/spark/spark-2.0.0/spark-2.0.0-bin-hadoop2.7.tgz
$ sudo tar -zxvf spark-2.0.0-bin-hadoop2.7.tgz

Шаг 14: Сообщите Python, где найти Spark

Наконец, нам нужно установить наши пути для Spark, чтобы Python мог его найти:

$ export SPARK_HOME='/home/ubuntu/spark-2.0.0-bin-hadoop2.7'
$ export PATH=$SPARK_HOME:$PATH
$ export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH

Шаг 15: Запустите Jupyter Notebook

Теперь у вас должно быть все настроено для запуска записной книжки Juptyer с помощью Spark! Запустить:

$ jupyter notebook

Затем, как это было сделано ранее, снова подключитесь через браузер к Jupyter Notebook вашего экземпляра. Запускаем новый блокнот и в блокноте типа ячейки:

from pyspark import SparkContext
sc = SparkContext()

Если это сработает, все готово!

Надеюсь, вы нашли это полезным! (Прочтите различные комментарии к этой статье, чтобы получить другие полезные советы читателей!) Спасибо за чтение.