Расширенный SQL на Spark

Spark SQL

Здравствуйте и вновь добро пожаловать на занятия по теме «SQL для маркетологов».

В этой лекции мы обсудим, как использовать SQL на фреймворке больших объёмов данных, именуемом Spark. Это более углублённый материал, поэтому для удобства вам понадобится некоторое знание языка Python. Кроме того, если вы не знали, Spark позволяет писать код также на Java и Scale. Вы можете запустить собственный кластер на Spark в командной строке с помощью скрипта, который мы рассмотрим в следующей лекции, или установить его в определённом месте. В этой лекции мы рассмотрим именно локальную установку.

Что замечательно в Spark – так это то, что он может получать доступ к данным отовсюду – из вашей локальной файловой системы, из файловой системы Hadoop и из S3 – простого сервиса хранения Amazon. И вероятнее всего, что ваши данные будут находиться в одном из этих трёх мест.

Когда вы будете готовы к установке Spark, перейдите по адресу и загрузите заархивированный файл. Далее разархивируйте файл и запустите следующую команду:

build/mvn –Pyarn –Phadoop-2.4-Dhadoop.version=2.4.0 –DskipTests clean package

Возможно, вам понадобится также установить Java последней версии и установить переменную окружения JAVA_HOME.

И последнее – удостоверьтесь, что всё работает, запустив команду

./bin/run-example SparkPi 10

Интересно, что Spark SQL не поддерживает формат SCV, зато поддерживает формат файлов JSON, имеющий удобный формат значений ключей.

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

python generate_actions.py 1000000 big_actions.csv

python convert_actions.py

Можете просмотреть файл spark.py, но он содержит лишь простенький пример, как загружать данные и отображать их в виде таблицы. Это весьма тривиально, поэтому не будем на нём останавливаться. Рассмотрим файл spark2.py – это скрипт, который загружает только что созданный нами файл JSON и запускает простой запрос: количество продаж каждого продукта. Результат выводится на экран.

from pyspark import SparkContext

from pyspark.sql import SQLContext

sc = SparkContext(“local”, “Simple App”)

sqlContext = SQLContext(sc)

df = sqlContext.read.json(“big_actions.json”)

df.registerTempTable(“user_actions”)

df2 = sqlContext.sql(“SELECT COUNT(*), product FROM user_actions WHERE action = ‘purchase’ GROUP BY product”)

df2.show()

Обратите внимание, что для запуска этого скрипта мы не можем просто запустить файл spark2.py в оболочке Python, как обычные скрипты Python. Для запуска этого скрипта нам понадобится Spark, который будет копировать этот скрипт на все компьютеры в кластере и координировать работу.

Итак, запустим скрипт.

Мы получили ожидаемый ответ. При желании, вы можете запустить SQLite чтобы удостовериться, что получится такой же результат.

 

Создание собственного кластера Spark на Amazon EC2

Я кратко расскажу вам, как создать собственный кластер на Spark. Предположим, ваша организация использует Spark, но ваши данные находятся на Hadoop или S3. В этой лекции я покажу вам простой способ создать собственный кластер на Spark.

Прежде всего вы должны создать Key Pair в Amazon Web Service и загрузить PEM-файл. Вы также можете воспользоваться уже существующим Key Pair, если у вас есть таковой. Затем вы должны установить переменные окружения AWS, которые можно получить из командной строки AWS. Далее – собственно создание кластера. Для этого вы можете воспользоваться следующей командой – конечно, подставив в неё свои значения Key Pair, путь, количество подчинённых компьютеров, название кластера и желаемую зону размещения:

./ec2/spark-ec2 –k ‘‘ваш Key Pair’’ –i/path/to/key.pem –s <количество подчинённых> launch <имя кластера> -copy-aws-credentials –z us-east-1b

Посмотреть доступные зоны вы можете в командной строке Amazon.

Запуск происходит точно так же, как и в случае локальной установки, только вместо localhost необходимо указать IP-адрес вашего компьютера-мастера, который вы можете получить с командной строки AWS:

spark-submit –master spark://:7077 spark2.py

После окончания работы не забудьте ликвидировать свой кластер, иначе работа в AWS может оказаться весьма дорогостоящей. Используйте тот же скрипт, что и ранее, но с командой destroy. Вам также необходимо помнить имя кластера, указывавшееся при его создании, так как оно используется и здесь:

./ec2/spark-ec2 destroy <имя кластера>

Если что-то из материала курса покажется вам чересчур сложным или у вас просто возникнут вопросы, там вы всегда можете задать их лично мне, а кроме того, я предлагаю свои услуги в качестве персонального учителя.

 

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: