Установка Apache Spark и IPython — TechCave

Небольшая заметка о том, как начать работу с Apache Spark на Ubuntu. Она, также, включает в себя настройки IPython с использованием pySpark

Установка Apache Spark и IPython

Machine Learning/Data Mining/Big Data

Установка Apache Spark и IPython

Небольшая заметка о том, как начать работу с Apache Spark на Ubuntu. Она, также, включает в себя настройки IPython с использованием pySpark.

Чтобы убедиться, что все настройки можно будет легко воспроизвести в облаке было принято решение установить все внутри виртуальной машины. Для этого мы будем использовать Vagrant и VirtualBox. В этой статье я не буду вдаваться в подробности о том, как это работает, или как они могут быть настроены. Я рекомендую вам прочитать документацию по Vagrant, чтобы узнать побольше о нем.

Настройка виртуальной машины с помощью Vagrant

Создайте новую папку на вашем компьютере, которая станет домашней для вашего Vagrant файла. После того, как папка будет создана перейдите в нее и инициализируйте виртуальную машину. В данном случае я выбрал стандартный дистрибутив Ubuntu 14.04.

$ mkdir vagrant-spark
$ cd vagrant-spark/
$ vagrant init ubuntu/trusty64

Vagrantfile был создан, и теперь его можно отредактировать, чтобы изменить какие-либо настройки, по вашему желанию. Нам необходимо изменить две маленькие вещи в Vagrantfile, остальное останется по умолчанию. Откройте Vagrantfile в текстовом редакторе, удалите все и вставьте в следующее:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
# To share a folder on your drive add the following:
# config.vm.synced_folder "<SYSTEM-PATH TO YOUR FOLDER>", "/home/vagrant/shared"
config.vm.provider "virtualbox"do |vb|
# Customize the amount of memory on the VM:
vb.memory = "2048"
end
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Port forwarding for the IPython port
config.vm.network "forwarded_port", guest:8001, host:8001
# Spark port forwarding
config.vm.network "forwarded_port", guest:8080, host:8080
config.vm.network "forwarded_port", guest:4040, host:4040
end

Теперь, чтобы запустить виртуальную машину выполните команду:

$ vagrant up --provider=virtualbox

Это запустит виртуальную машину. Чтобы остановить ее, когда вы захотите, то можно использовать команду:

$ vagrant halt

Теперь нам нужно зайти в виртуальную машину, для этого используем SSH.

$ vagrant ssh

Настройка Ubuntu в виртуальной машине

Установите некоторые основные пакеты для Ubuntu, для того чтобы убедиться, что некоторые библиотеки Python будут работать без проблем.

$ sudo apt-get install git htop python-dev build-essential libatlas-base-dev gfortran libevent-dev libpng-dev libjpeg8-dev libfreetype6-dev

Установка Java

Для работы Spark необходимо, чтобы была установлена Java.

$ sudo apt-add-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
$ java -version

Установка Scala (если необходимо)

Некоторые из опций Spark еще не доступны для доступа и использования через Python (например, Graphx и некоторые модули MLLib), таким образом, мы установим Scala и сможем работать с этими функциями с помощью нее.

# Download the Scala tarball.
$ wget http://www.scala-lang.org/files/archive/scala-2.11.6.tgz
# Create a new folder to place the scala-installation in.
$ sudo mkdir /usr/local/src/scala
# Extract the contents into the newly created directory.
$ sudo tar xvf scala-2.11.6.tgz -C /usr/local/src/scala/
# Remove the tarball $ rm scala-2.11.6.tgz

Откройте ваш bash_profile командой:

$ nano ~/.bash_profile

и добавьте следующие строки:

# Scala environment variable and path.
export SCALA_HOME=/usr/local/src/scala/scala-2.11.6
export PATH=$SCALA_HOME/bin:$PATH

Загрузка и установка Apache Spark

Сначала загрузим и распакуем архив Spark.

$ cd $HOME
# Download the pre-built Spark tarball.
$ wget http://mirror.ox.ac.uk/sites/rsync.apache.org/spark/spark-1.4.0/spark-1.4.0-bin-hadoop2.6.tgz
# Extract the contents to your HOME folder.
$ tar -xvf spark-1.4.0-bin-hadoop2.6.tgz
# Remove the tarball. $ rm spark-1.4.0-bin-hadoop2.6.tgz

Дальше запускаем:

$ cd spark-1.4.0-bin-hadoop2.6
$ ./bin/run-example SparkPi 10

Вы должны увидеть, что то вроде этого:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
15/08/2110:52:56 INFO SparkContext: Running Spark version 1.4.0
...
15/08/2110:53:02 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 736 bytes result sent to driver
15/08/2110:53:02 INFO TaskSetManager: Starting task 1.0 in stage 0.0 (TID 1, localhost, PROCESS_LOCAL, 1446 bytes)
15/08/2110:53:02 INFO Executor: Running task 1.0 in stage 0.0 (TID 1)
15/08/2110:53:02 INFO TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 953 ms on localhost (1/10)
15/08/2110:53:03 INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 736 bytes result sent to driver
...
15/08/2110:53:03 INFO Executor: Running task 9.0 in stage 0.0 (TID 9)
15/08/2110:53:03 INFO Executor: Finished task 9.0 in stage 0.0 (TID 9). 736 bytes result sent to driver
15/08/2110:53:03 INFO TaskSetManager: Finished task 9.0 in stage 0.0 (TID 9) in 16 ms on localhost (10/10)
15/08/2110:53:03 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:35) finished in 1.457 s
15/08/2110:53:03 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
15/08/2110:53:03 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:35, took 1.991463 s

Прежде чем мы продолжим и приступим к настройке PySpark, Python и IPython мы добавим несколько переменных окружения в нашей системе где установлен Spark.

Откройте ваш bash_profile командой:

$ nano ~/.bash_profile

и добавьте строки:

# Set the Spark Home as an environment variable.
export SPARK_HOME="$HOME/spark-1.4.0-bin-hadoop2.6
# Define your Spark arguments for when running Spark.
export PYSPARK_SUBMIT_ARGS="--master local[2]"

Оболочка PySpark

Теперь у нас есть рабочий Spark, мы можем использовать Python. В комплекте со Spark идет pySpark оболочка. Запустите ее, используя:

$ ./bin/pyspark

После этого вы окажитесь внутри PySpark и сможете использовать Python для работы со Spark.

>>> sc
<pyspark.context.SparkContext object at 0x7f05502a1750>
data = [1, 2, 3, 4, 5]
dataRDD = sc.parallelize(data)
>>> dataRDD
ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:396

PySpark — Конфигурация IPython

Сначала установим virtualenv, что позволит нам работать в виртуальной среде.

# Install pip, the python package manager.
$ sudo apt-get install python-pip
# Install virtualenv
$ sudo pip install virtualenv
# Create a virtual environment.
$ virtualenv pyEnv

Теперь мы активируем это окружение, и в дальнейшем мы сможем устанавливать наши библиотеки Python внутри виртуальной среды.

$ source pyEnv/bin/activate

Далее устанавливаем IPython в виртуальной среде pyEnv. Для установки используйте следующую команду.

$ sudo pip install "ipython[notebook]"

Теперь у нас есть IPython установленный в нашей виртуальной среде. Следующим важным этапом является, настройка IPython таким образом, что бы он работал с ядром pySpark, и мы могли начать использовать Spark внутри IPython. Мы сделаем это путем создания профиля IPython специально для Spark.

# Create a new IPython profile.
$ ipython profile create pyspark

Теперь, когда мы создали реальный профиль pyspark для IPython нам нужно будет его настроить. Большинство настроек может быть сделано в файле ipython_notebook_config.py. Откройте этот файл (я использую nano для редактирования):

$ nano ~/.ipython/profile_pyspark/ipython_notebook_config.py

Для начала изменим следующую строку:

# c.NotebookApp.ip = 'localhost'
c.NotebookApp.ip = '*'

Так как мы работаем на виртуальном сервере, мы не хотим, чтобы IPython открывал браузер по умолчанию. Чтобы отключить это необходимо добавить следующую строку:

# c.NotebookApp.open_browser = True
c.NotebookApp.open_browser = False

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

# c.NotebookApp.port = 8888
c.NotebookApp.port = 8001

Конфигурация IPython закончена, но мы должны убедиться, что он на самом деле создает SparkContext при старте. Мы можем сделать это, изменив настройки файла IPython: 00-pyspark-setup.py. Откройте этот файл в текстовом редакторе:

$ nano ~/.ipython/profile_pyspark/startup/00-pyspark-setup.py

и вставьте следующий скрипт на Python. Затем сохраните содержимое.

# Configure the necessary Spark environment
import os
import sys
# Set the spark_home variable
SPARKHOME = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, SPARKHOME + "/python")
# Add the py4j to the path.
# You may need to change the version number to match your install
sys.path.insert(0, os.path.join(SPARKHOME, 'python/lib/py4j-0.8.2.1-src.zip'))
# Initialize PySpark to predefine the SparkContext variable 'sc'
execfile(os.path.join(SPARKHOME, 'python/pyspark/shell.py'))

Чтобы запустить IPython и он мог использовать Spark мы должны воспользоваться достаточно длинной командой, поэтому мы создадим псевдоним для нее в нашем .bash_profile. Откройте профиль с помощью команды:

$ nano ~/.bash_profile

и добавить следующие две строки:

# IPython alias for the use with SPARK.
alias IPYSPARK='PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook --profile=pyspark --ip=0.0.0.0" $SPARK_HOME/bin/pyspark'

После сохранения и закрытия убедитесь, что вы перезагрузили профиль, используя:

$ source ~/.bash_profile

Теперь мы можем запустить IPython (использующий оболочку Spark), используя только что созданный псевдоним:

$ cd $HOME
$ IPYSPARK

Теперь на вашем локальном компьютере, откройте веб-браузер и перейдите на localhost:8001. Вы должны увидеть сервер IPython Notebook.

23:55
2248

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

Георгiй Москвитинъ
Andpyxa Tutunnik
Andrey_fox
Jane linch
genagy
Pasha Radiuk
KotikBSD
Эрик Имашев
Амир Исмагилов