Apache Pig

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:48, 27 декабря 2018.
Apache Pig
Pig-image.png
Разработчики: Apache Software Foundation
Выпущена: 11 September 2008 года; 11 years ago (2008-09-11)
Постоянный выпуск: v0.17.0 / 19 June 2017 года; 2 years ago (2017-06-19)
Состояние разработки: Active
Операционная система: Microsoft Windows, OS X, Linux
Тип ПО: Анализ данных
Лицензия: Apache License 2.0
Веб-сайт pig.apache.org

Apache Pig – это высокоуровневый процедурный язык, предназначенный для выполнения запросов к большим слабо структурированным наборам данных с помощью платформ Hadoop и MapReduce. Pig упрощает использование Hadoop, позволяя выполнять SQL-подобные запросы к распределенным наборам данных. Характерным свойством программ Pig является то, что их структура поддается существенному распараллеливанию, что в свою очередь позволяет с его помощью обрабатывать очень большие наборы данных. Вместо того, чтобы создавать отдельное приложение MapReduce, можно написать простой сценарий на Pig Latin, который будет автоматически распараллеливаться и распределяться между узлами кластера[Источник 1].

Pig Latin

Pig Latin – относительно простой язык, выполняющий операторы. Оператор – это процедура, принимающая входные данные (например, массив, состоящий из набора записей) и формирующая на выходе другой массив. Массив – это структура, подобная таблице реляционной базы данных, в которой записи аналогичны строкам таблицы и состоят из полей. В сценариях Pig Latin часто используется определенный алгоритм, в котором данные считываются из файловой системы, затем над ними выполняется ряд действий (одно или несколько преобразований), после чего конечная структура записывается обратно в файловую систему.

В Pig имеется богатый набор типов данных – поддерживаются не только высокоуровневые объекты (например, массивы, записи и сопоставления), но также и простые типы данных, например int, long, float, double, chararray и bytearray. К простым типам данных можно применять ряд арифметических операций (например add, subtract, multiply, divide и module), а также условный оператор bincond, который работает так же, как оператор ternary языка C. Как и следует ожидать, в Pig имеется полный набор операторов сравнения, включая сопоставление с шаблонами с помощью регулярных выражений.

Операторы Pig Latin работают с отношениями (и называются реляционными операторами). Ниже приведены основные реляционные операторы Pig:

  • FILTER - выбор набора записей из массива в соответствии с заданным условием.
  • FOREACH - выполнение итерации по записям массива и преобразование данных.
  • GROUP - группировка данных в один или несколько массивов.
  • JOIN - соединение двух или нескольких массивов (внутреннее или внешнее соединение).
  • LOAD - загрузка данных из файловой системы.
  • ORDER - сортировка массива по одному или нескольким полям.
  • SPLIT - разделение массива на два или более массива.
  • STORE - сохранение данных в файловой системе.

Установка

В этом разделе приведена инструкция по установке Apache Pig[Источник 2].

Требования

Обязательные

Для пользователей Unix и Windows необходимо:

  • Hadoop 2.x (Можно запускать Pig вместе с другими версиями Hadoop с помощью присвоения переменной окружения HADOOP_HOME пути к Hadoop. Если переменная HADOOP_HOME не установлена, Pig будет запускаться со встроенной версией, на данный момент Hadoop 2.7.3.)
  • Java 1.7 (необходимо установить в JAVA_HOME путь до Java)

Опциональные

Загрузка Pig

Для загрузки Pig необходимо произвести следующие действия:

  1. Скачать последнюю стабильную версию можно с одного из зеркал Apache.
  2. Распаковать скачанный архив Pig и учесть следующее:
    1. Скрипт Pig расположен в директории bin(/pig-n.n.n/bin/pig). Переменные окружения Pig описываются в файле скрипта Pig.
    2. Файл свойств Pig pig.properties расположен в директории conf (/pig-n.n.n/conf/pig.properties). Можно указать альтернативное расположение, используя переменную окружения PIG_CONF_DIR.
  3. Добавить /pig-n.n.n/bin в переменную PATH, используя export (bash,sh,ksh) или setenv (tcsh,csh). Например:
    $ export PATH=/<my-path-to-pig>/pig-n.n.n/bin:$PATH
  4. С помощью следующей команды можно проверить, успешно ли произведена установка:
    $ pig -help

Сборка Pig

Для сборки Pig необходимо произвести следующие действия:

  1. Загрузить исходные коды Pig из SVN:
    $ svn co http://svn.apache.org/repos/asf/pig/trunk
  2. Произвести сборку:
    $ ant
    При успешной сборке должен быть создан файл pig.jar.
  3. Проверить файл pig.jar можно с помощью запуска unit-теста:
    $ ant test

Видео с установкой

Работа с Pig и примеры использования

Команды Pig и операторы Pig Latin можно выполнять в различных режимах. Эти режимы приведены в таблице ниже:

Режимы выполнения

В Pig есть 6 видов режимов выполнения:

  • Local Mode - для запуска Pig в этом режиме необходимо иметь доступ к одной машине; все файлы должны быть установлены и запущены с использованием локального хоста и файловой системы. Для перехода в этот режим используется следующая команда:
    $ pig -x local
  • Tez Local Mode - этот режим похож на локальный за исключением того, что внутри Pig будет вызывать tez runtime движок. Для перехода в этот режим используется следующая команда:
    $ pig -x tez_local
  • Spark Local Mode - этот режим похож на локальный за исключением того, что внутри Pig будет вызывать spark runtime движок. Для перехода в этот режим используется следующая команда:
    $ pig -x spark_local
    Примечание: Spark Local Mode является экспериментальным. Некоторые запросы выдают ошибку на большом объеме данных в локальном режиме.
  • Mapreduce Mode - для запуска Pig в этом режиме необходимо иметь иметь доступ к кластеру Hadoop и установке HDFS. Этот режим является режимом по умолчанию. Для перехода в этот режим используется следующая команда:
    $ pig -x mapreduce
  • Tez Mode - для запуска Pig в этом режиме необходимо иметь иметь доступ к кластеру Hadoop и установке HDFS. Для перехода в этот режим используется следующая команда:
    $ pig -x tez
  • Spark Mode - для запуска Pig в этом режиме необходимо иметь доступ к кластерам Spark, YARN или Mesos и к установке HDFS. Для перехода в этот режим используется следующая команда:
    $ pig -x spark

Интерактивный режим

Запустить Pig в интерактивном режиме можно с помощью оболочки Grunt. Вызвать оболочку Grunt можно командой pig в терминале.

В примере ниже выражение Pig Latin производит извлечение идентификаторов всех пользователей из файла /etc/passw. В первую очередь нужно скопировать файл /etc/passwd в локальную рабочую директорию. Затем перейти в оболочку Grunt (c помощью команды pig) и выполнить скрипт, указанный ниже. Оператор DUMP выведет результат в терминал.

grunt> A = load 'passwd' using PigStorage(':');
grunt> B = foreach A generate $0 as id;
grunt> dump B;

Режим Batch

Запустить Pig в режиме Batch можно с помощью оболочки Grunt. Вызвать оболочку Grunt можно командой pig в терминале (в локальном режиме или в режиме hadoop). Пример ниже производит аналогичные действия, что и предыдущий, но при этом сохраняет результат в файл id.out с помощью оператора STORE. Сам скрипт хранится в файле id.pig.

/* id.pig */
A = load 'passwd' using PigStorage(':');
B = foreach A generate $0 as id;
store B into 'id.out';

Чтобы выполнить скрипт Pig из файла, например в локальном режиме, необходимо выполнить следующую команду:

$ pig -x local id.pig

Инструкции в Pig Latin

Инструкции Pig Latin это базовые конструкции, которые используются для обработки данных в Pig. Инструкция Pig Latin это оператор, которая берет в качестве входных данных определенное отношение и выдает другое отношение в качестве выходных данных. Это определение относится ко всем операторам Pig Latin за исключением LOAD и STORE, которые читают данные из файловой системы и записывают их в нее. Инструкции Pig Latin могут включать выражения и так называемые схемы. Инструкции Pig Latin могут содержать несколько строк и каждая строка должна завершаться точкой с пятой. По умолчанию инструкции Pig Latin исполняются множественными запросами.

Инструкции Pig Latin обычно организованы следующим образом:

  • Оператор LOAD используется для чтения данных из файловой системы и записи в нее.
  • Набор операторов "преобразования" для обработки данных.
  • Оператор DUMP для просмотра результатов или оператор STORE для их сохранения.

Стоит учитывать, что операторы DUMP или STORE необходимы для генерирования выходных данных.

  • В примере ниже Pig проверит, но не выполнит инструкции LOAD и FOREACH.
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
B = FOREACH A GENERATE name;
  • В примере ниже Pig проверит и затем выполнит инструкции LOAD, FOREACH, and DUMP.
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
B = FOREACH A GENERATE name;
DUMP B;
(John)
(Mary)
(Bill)
(Joe)

Загрузка данных

Для загрузки данных в Pig и их чтения используются операторы LOAD и load/store (PigStorage является функцией загрузки по умолчанию)

Работа с данными

Pig позволяет преобразовывать данные множеством способов. Для стоит ознакомиться с этими операторами:

  • Для работы с кортежами или строками данных используется оператор FILTER. Для работы со столбцами данных используется оператор FOREACH.
  • Для группировки данных в одно отношение используется оператор GROUP. Для группировки данных в два или более отношений используются операторы COGROUP, внутренний JOIN и внешний JOIN.
  • Для объединения содержания двух или более отношений используется оператор UNION. Для разделения содержимого одного отношения на несколько отношений используется оператор SPLIT.

Хранение промежуточных результатов

Pig хранит промежуточные данные, сгенерированные задачами MapReduce во временной директории на файловой системе HDFS. Эта директория должна существовать на кластере HDFS. Её можно сконфигурировать с помощью свойства pig.temp.dir. Значением по умолчанию для этого свойства является "/tmp".

Хранение окончательных результатов

Для записи результатов на файловую систему используются оператор STORE и функции загрузка/хранение (PigStorage является функцией хранения по умолчанию). Примечание: Во время тестирования или отладки для просмотра результата в терминале можно использовать оператор DUMP. Но в рабочих условиях для сохранения данных стоит использовать оператор STORE (сравнение операторов: Store vs. Dump).

Отладка в Pig Latin

В Pig Latin есть операторы для отладки инструкций Pig Latin:

  • Для вывода результатов в терминал используется оператор DUMP.
  • Для просмотра схемы отношения используется оператор the DESCRIBE.
  • Для просмотра логических или физических планов выполнения вычисления отношений используется оператор EXPLAIN.
  • Для просмотра пошагового выполнения инструкций используется оператор ILLUSTRATE.

Источники

  1. IBM Developer [Электронный ресурс]: M. Tim Jones. Process your data with Apache Pig / Дата обращения: 17.12.2018. Режим доступа: https://www.ibm.com/developerworks/ru/library/l-apachepigdataquery/index.html#artrelatedtopics
  2. Документация Apache Pig [Электронный ресурс]: Официальный сайт / Дата обращения: 17.12.2018. Режим доступа: http://pig.apache.org/docs/latest/start.html