Учебное пособие по Hadoop Pig: что такое Apache Pig? Archiтектура, пример

⚡ Умное резюме

Apache Pig — это высокоуровневая платформа для анализа больших наборов данных в Hadoop, сочетающая язык потоков данных Pig Latin с средой выполнения, которая компилирует каждый скрипт в MapReduce, Tez или Spark автоматические задания.

  • 🔘 Два компонента: Pig Latin предоставляет язык программирования, а среда выполнения Pig преобразует каждый скрипт в кластерное задание.
  • ☑️ Типы выполнения: В текущих версиях доступны шесть типов исполняемых файлов, выбираемых с помощью флага -x, от локального до Spark.
  • ✅ Необходимые условия: Рабочая установка Hadoop плюс Java, при условии экспорта переменных HADOOP_HOME и JAVA_HOME, сначала должен существовать.
  • 🧪 Реализованный пример: Скрипт, состоящий из четырех операторов, загружает файл SalesJan2009.csv, группирует его по странам и сохраняет количество товаров.
  • 🇧🇷 Модель данных: Использование скалярных типов, а также кортежей, мешков и карт позволяет Pig читать вложенные и слабо структурированные файлы.
  • 📈 Текущая версия: Выпуск Apache Pig 0.18.0 запланирован на сентябрь 2025 года и будет включать Hadoop 3 и Tez. Spark и Python 3 поддержки.

Учебное пособие по Hadoop Pig, охватывающее архитектуру Apache Pig, установку и пример работы с языком Pig Latin.

В этом руководстве сначала рассматривается идея Apache Pig, а затем подробно описывается процесс его установки и запуска полноценного скрипта на языке Pig Latin от начала до конца.

Что такое Apache Pig?

Свинья — это высокоуровневый персонаж. язык программирования Полезно для анализа больших наборов данных. Pig — результат работы разработчиков в Yahoo!

В рамках MapReduce программы необходимо преобразовывать в последовательность этапов Map и Reduce. Однако эта модель программирования не знакома аналитикам данных. Поэтому, чтобы преодолеть этот разрыв, был разработан абстракционный подход.tracКомплекс под названием «Свинья» был построен на вершине Hadoop.

Apache Pig позволяет людям больше сосредоточиться на анализе больших объемов данных и тратить меньше времени на написание программ MapReduce. Подобно свиньям, которые едят все подряд, язык программирования Apache Pig разработан для работы с любыми типами данных. Именно поэтому он и называется Pig! Талисман проекта, изображенный ниже, подчеркивает эту идею.

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

Проект всё ещё активен. Apache Pig 0.18.0 Выпущена 15 сентября 2025 года и добавляет поддержку Hadoop 3, Tez 0.10, Hive 3. Spark 3, HBase 2 и Python 3, согласно Страница релизов Apache PigПриведённое ниже пошаговое руководство изначально было написано для гораздо более старой версии 0.12.1, поэтому в некоторых шагах указано, что в более новых версиях всё работает иначе.

Свинья Archiтекстура

Архитектура Pig состоит из двух компонентов:

  1. Свинья латынь, какой язык
  2. Среда выполнения, для проведения программ на языке поросячьей латыни.

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

«Пиглатин» — сравнительно строгий язык, использующий знакомые ключевые слова из области обработки данных, например, «объединение», «группировка» и «фильтр». Диаграмма ниже. tracЭто скрипт, проходящий через оболочку Grunt, парсер, оптимизатор и компилятор на пути к исполняемому движку.

Архитектурная схема Apache Pig, показывающая передачу скриптов Pig Latin через парсер, оптимизатор и компилятор к исполнительному механизму.

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

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

  1. Локальный режим: В этом режиме язык Hadoop Pig работает в одном экземпляре. JVM и использует локальную файловую систему. Этот режим подходит только для анализа небольших наборов данных с помощью Pig в Hadoop.
  2. Режим MapReduce: В этом режиме запросы, написанные на Pig Latin, преобразуются в задания MapReduce и выполняются в кластере Hadoop (кластер может быть псевдораспределенным или полностью распределенным). Режим MapReduce с полностью распределенным кластером полезен для запуска Pig на больших наборах данных.

Эти два варианта — классическая пара. В текущих версиях фактически доступны шесть типов выполнения, или exectype, каждый из которых выбирается с помощью одного и того же параметра. -x флаг, как это задокументировано в Руководство по началу работы с Pig 0.18.0.

Исполнительный тип Command Где проходит работа
Местное pig -x local Единая JVM, работающая с локальной файловой системой.
местный Тез pig -x tez_local Одна JVM, использующая среду выполнения Tez (экспериментальная версия).
Spark локальным pig -x spark_local Единая JVM, использующая Spark среда выполнения (экспериментальная)
Уменьшение карты pig or pig -x mapreduce Кластер Hadoop с HDFS; это значение по умолчанию.
Tez свинья -х тез Кластер Hadoop, работающий под управлением движка Tez.
Spark свинья -x искра A SparkКластер YARN или Mesos с HDFS

Типы данных в стиле «свиной латыни» и OperaTORs

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

В «свиной латыни» представлены два семейства типов:

  • Скалярные типы: int, long, float, double, chararray, bytearray, boolean, datetime, biginteger и bigdecimalВ приведенном ниже примере скрипта каждый столбец объявляется как chararray.
  • Сложные типы: a кортеж представляет собой упорядоченный набор полей и ведет себя как строка; сумка представляет собой неупорядоченную коллекцию кортежей и ведёт себя как таблица; карта представляет собой набор пар ключ-значение, ключом которого должен быть chararray.

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

оператор Что она делает
ЗАГРУЗИТЬ / ХРАНИТЬ Прочитать данные из файловой системы и записать результат обратно.
ФИЛЬТР Оставляйте только те кортежи, которые соответствуют условию.
ДЛЯ КАЖДОГО … СГЕНЕРИРОВАТЬ Работайте столбец за столбцом, создавая новые поля.
ГРУППА / СОГРУППА Сгруппируйте одно, два или более отношений по ключу.
РЕГИСТРАЦИЯ Объедините связи с помощью внутреннего или внешнего соединения.
СОЮЗ / РАЗДЕЛЕНИЕ Объединить отношения или разделить одно на несколько.
Сортировать по / Уникальный / Лимит Отсортировать, удалить дубликаты и ограничить количество кортежей.
ОПИСАТЬ / ОБЪЯСНИТЬ / ИЛЛЮСТРИРОВАТЬ Проверьте результаты, схемы, планы выполнения и примеры запусков.

Четыре оператора инспекции также используют упрощенные алгоритмы Grunt, что позволяет экономить время.ping во время отладки: \d для DUMP, \de для DERIBE, \e для ОБЪЯСНЕНИЯ и \i для ИЛЛЮСТРАЦИИ.

Предпосылки

Pig — это клиентский инструмент. Он анализирует скрипт, планирует работу и отправляет задания, но не предоставляет собственное хранилище или кластер, поэтому сначала необходимо установить работающий Hadoop. Список требований к Apache невелик.

Компонент Требование Почему это необходимо
Hadoop Hadoop 2.x или 3.x, с экспортированной переменной HADOOP_HOME. Предоставляет HDFS и механизм выполнения. Без HADOOP_HOME Pig 0.18.0 переключается на встроенный Hadoop 2.7.3.
Java Java Версия 1.7 или более поздняя, ​​с переменной JAVA_HOME, установленной в корневой каталог установки. Pig и демоны Hadoop — это Java программы
Python (опционально) Python 2.7 Требуется только для потоковой передачи. Python определяемые пользователем функции
Муравей (необязательно) Муравей 1.8 Требуется только при сборке или перекомпиляции Pig из исходного кода.

В дополнение к этому списку следует отметить два практических момента. Во-первых, запускайте все от имени пользователя Linux, у которого уже есть домашний каталог в указанной директории. HDFS и разрешение на запись в него; в этом руководстве используется hduserВо-вторых, запустите кластер перед запуском Pig в режиме MapReduce, поскольку Pig немедленно завершит работу с ошибкой, если NameNode и ResourceManager будут недоступны. Если Hadoop еще не установлен, выполните следующие действия: Как установить Hadoop первый.

Как скачать и установить Pig

Теперь в этом руководстве по Apache Pig мы узнаем, как загрузить и установить Pig:

Прежде чем приступить к самому процессу, убедитесь, что у вас установлен Hadoop. Измените пользователя на 'hduser' (идентификатор, использованный при настройке Hadoop; вы можете переключиться на идентификатор пользователя, использованный при настройке вашего собственного Hadoop).

Команда терминала, переключающая пользователя Linux на hduser перед началом установки Pig.

Шаг 1) Загрузите стабильную последнюю версию Pig Hadoop с любого из доступных зеркальных сайтов по адресу:

https://pig.apache.org/releases.html

Выберите для загрузки файл tar.gz (а не src.tar.gz), как показано ниже.

Apache Pig выпустил страницу загрузки с архивом tar.gz, из которого можно выбрать нужный файл.

Шаг 2) После завершения загрузки перейдите в каталог, содержащий загруженный tar-архив, и переместите его в место, где вы хотите установить Pig Hadoop. В данном случае мы переместим его в /usr/local.

Перемещение загруженного файла Pig tar в каталог /usr/local через терминал.

Перейдите в каталог, в котором будут находиться файлы Pig Hadoop.

cd /usr/local

ExtracСодержимое tar-архива представлено ниже.

sudo tar -xvf pig-0.12.1.tar.gz

Терминал эксtracРаспаковка архива Pig с помощью команды sudo tar -xvf

Шаг 3) Измените файл ~/.bashrc, чтобы добавить переменные окружения, связанные с Pig.

Откройте файл ~/.bashrc в любом текстовом редакторе и внесите указанные ниже изменения.

export PIG_HOME=<Installation directory of Pig>
export PATH=$PIG_HOME/bin:$HADOOP_HOME/bin:$PATH

В текстовом редакторе показаны строки экспорта PIG_HOME и PATH, добавленные в файл bashrc.

Шаг 4) Теперь выполните команду `source` для получения конфигурации среды, используя приведенную ниже команду.

. ~/.bashrc

Выполняется команда `source` в терминале для загрузки файла `bashrc`, чтобы новые переменные окружения Pig вступили в силу.

Шаг 5) Нам необходимо перекомпилировать Pig для поддержки Hadoop 2.2.0.

Вот шаги, которые необходимо выполнить.

Перейдите в главный каталог Pig.

cd $PIG_HOME

Установите Ant.

sudo apt-get install ant

Установка Apache Ant с помощью apt-get в терминале в рамках подготовки к перекомпиляции Pig.

Примечание: Загрузка начнётся и займёт время, зависящее от скорости вашего интернет-соединения.

Перекомпилируйте Pig.

sudo ant clean jar-all -Dhadoopversion=23

В терминале запущена целевая программа Ant, которая перекомпилирует Pig для линейки Hadoop 2.

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

Кроме того, если этот процесс зависнет где-нибудь, и вы не увидите никаких изменений в командной строке более 20 минут, нажмите Ctrl + c и повторно выполните ту же команду.

В нашем случае это занимает 20 минут.

Вывод терминала после перекомпиляции Pig, которая в данном примере заняла около двадцати минут.

Этот этап перекомпиляции относится к эпохе 0.12.1, когда поставляемые JAR-файлы были собраны для Hadoop 1 и... -Dhadoopversion=23 Флаг изменил сборку Ant на версии Hadoop 0.23 и 2.x. Apache Pig 0.18.0 поставляется с бинарными файлами, которые уже работают на Hadoop 2.7 и выше, а также на Hadoop 3, поэтому в текущей версии вы обычно можете распаковать архив и сразу перейти к тесту ниже.

Шаг 6) Проверьте установку Pig с помощью команды.

pig -help

Вывод команды `pig -help`, отображающий параметры командной строки Pig после установки.

Пример сценария свиньи

После установки Pig оставшаяся часть этого руководства по Apache Pig запускает полноценный скрипт. Мы будем использовать скрипты Pig, чтобы узнать количество проданных товаров в каждой стране.

Входные данные: Наш входной набор данных представляет собой CSV-файл. Продажиянварь2009.csv.

Шаг 1) Запустите Hadoop.

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Шаг 2) В больших данных Pig принимает файл из HDFS в режиме MapReduce и сохраняет результаты обратно в HDFS.

Скопируйте файл SalesJan2009.csv (хранящийся в локальной файловой системе по адресу ~/input/SalesJan2009.csv) в домашний каталог HDFS (Hadoop Distributed File System).

В этом примере с Apache Pig файл находится во входной папке. Если файл хранится в другом месте, укажите это имя.

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/input/SalesJan2009.csv /

Копирование файла SalesJan2009.csv из локальной файловой системы в HDFS через терминал.

Проверьте, был ли файл действительно скопирован.

$HADOOP_HOME/bin/hdfs dfs -ls /

Корневой каталог HDFS подтверждает, что файл SalesJan2009.csv был скопирован.

Шаг 3) Конфигурация свиньи.

Сначала перейдите в каталог $PIG_HOME/conf и сохраните копию исходного файла свойств.

cd $PIG_HOME/conf
sudo cp pig.properties pig.properties.original

Создание резервной копии файла pig.properties в терминале перед редактированием конфигурации Pig.

Откройте файл pig.properties с помощью любого текстового редактора и укажите путь к файлу журнала, используя параметр pig.logfile.

sudo gedit pig.properties

Конфигурационный файл pig.properties, открытый в текстовом редакторе, находится в разделе «Файл журнала».

Программа для регистрации ошибок будет использовать этот файл.

Шаг 4) Выполните команду 'pig', которая запустит командную строку Pig — интерактивную оболочку для запросов к Pig.

pig

Интерактивная оболочка Grunt запускается после выполнения команды pig.

Шаг 5) В командной строке Grunt для Pig выполните следующие команды Pig в указанном порядке.

— A. Загрузите файл, содержащий данные.

salesTable = LOAD '/SalesJan2009.csv' USING PigStorage(',') AS (Transaction_date:chararray,Product:chararray,Price:chararray,Payment_Type:chararray,Name:chararray,City:chararray,State:chararray,Country:chararray,Account_Created:chararray,Last_Login:chararray,Latitude:chararray,Longitude:chararray);

Нажмите Enter после этой команды.

Оболочка Grunt принимает оператор LOAD, который считывает CSV-файл с данными о продажах в таблицу связей.

— Б. Сгруппируйте данные по полю «Страна».

GroupByCountry = GROUP salesTable BY Country;

Grunt shell принимает заявление GROUP, которое группирует отношения продаж по странам.

— C. Для каждого кортежа в 'GroupByCountry' сгенерируйте результирующую строку вида «Название страны: Количество проданных товаров».

CountByCountry = FOREACH GroupByCountry GENERATE CONCAT((chararray)$0,CONCAT(':',(chararray)COUNT($1)));

Нажмите Enter после этой команды.

Оболочка Grunt принимает оператор FOREACH GENERATE, который формирует строку с данными о стране и количестве.

— D. Сохраните результаты потока данных в каталоге 'pig_output_sales' в HDFS.

STORE CountByCountry INTO 'pig_output_sales' USING PigStorage('\t');

Оболочка Grunt принимает оператор STORE, который записывает выходные данные в каталог pig_output_sales.

Выполнение этой команды займет некоторое время. После завершения вы должны увидеть следующий экран.

Экран консоли отображается после завершения выполнения команды STORE.

Шаг 6) Результат можно увидеть через командный интерфейс следующим образом:

$HADOOP_HOME/bin/hdfs dfs -cat pig_output_sales/part-r-00000

Вывод файла результатов из командной строки, содержащий список проданных товаров по странам.

Результаты также можно просмотреть через веб-интерфейс.

Откройте http://localhost:50070/ в веб-браузере.

Порт 50070 — это веб-интерфейс NameNode в Hadoop 2. В Hadoop 3 эта же страница была перенесена на порт 9870, поэтому используйте этот адрес, если ваш кластер работает под управлением Hadoop 3.

Веб-интерфейс Hadoop NameNode используется для просмотра файловой системы HDFS.

Теперь выберите «Просмотреть файловую систему» ​​и перейдите к каталогу /user/hduser/pig_output_sales.

В браузере HDFS отображается каталог pig_output_sales, расположенный по пути домашнего каталога пользователя hduser.

Откройте part-r-00000, чтобы прочитать пары «страна» и «количество товаров», созданные скриптом.

Просмотр выходного файла part-r-00000 в браузере с парами "страна" и "количество товаров".

Apache Pig против Hive против MapReduce

Понятие «Свинья» редко оценивается само по себе. Обычно задают вопрос, относится ли та или иная должность к категории «Свинья», в контексте... Hive или в написанной вручную программе MapReduce, поскольку все три варианта в конечном итоге становятся заданиями в одном и том же кластере.

Аспект MapReduce (Java) Апачская свинья Апачский улей
Интерфейс Java API Pig Latin — язык сценариев для обработки потоков данных. HiveQLдиалект SQL
Уровень абсtracпроизводство Низкий Средний Высокий
Типичный пользователь Java разработчик Инженер по обработке данных или исследователь Аналитик, уверенно владеющий SQL.
Подходящие данные Все обрабатывается вручную. Структурированные и полуструктурированные; схема является необязательной при загрузке. Структурированные таблицы, зарегистрированные в метахранилище.
Code объем Большинство линий Меньше строк Наименьшее количество строк в запросе
Запускается как Задача MapReduce Компилируется в MapReduce, Tez или Spark работе Компилируется в MapReduce, Tez или Spark работе
Лучшее в Полный контроль и возможность настройки логики Многоэтапные ETL-конвейеры Создание запросов и отчетов по запросу

На практике разделение довольно простое. Используйте Hive, когда данные уже выглядят как таблица, а вопрос — как SQL-запрос. Используйте Pig, когда входные данные неструктурированы, когда конвейер представляет собой цепочку преобразований, а не один запрос, или когда один и тот же скрипт должен выполнять ветвление и повторное объединение. Используйте MapReduce только тогда, когда ни один из вариантов абсолютного разделения не подходит.tracЛогику можно выразить, потому что количество строк быстро растет.

Свинья также органично вписывается в остальную экосистему. Совок и Флюм собираем необработанные данные, Pig или Hive обрабатывают их, а затем используется планировщик, например, Апач Сузи объединяет этапы в повторяющийся конвейер. Для более полного понимания того, где эти инструменты могут быть полезны, см. руководство по... большие данные и сводка инструменты для больших данныхДля получения информации о коммерческой альтернативе ETL-процессам, заменяющей написанные вручную скрипты, см. Talend.

Часто задаваемые вопросы (FAQ)

Да. Apache Pig 0.18.0 был выпущен 15 сентября 2025 года и добавил поддержку Hadoop 3, Tez 0.10, Hive 3. Spark 3, HBase 2 и Python 3. Разработка идёт медленнее, чем в годы существования Yahoo!, но проект не закрыт.

Искусственный интеллект-помощники формируют логику преобразования на основе простого описания, предлагают ключи объединения, отмечают отклонения схемы между запусками и обобщают журналы кластера, определяя вероятную причину. Результат следует рассматривать как черновой вариант, который еще нуждается в профилировании на реальных данных.

Copilot быстро генерирует правдоподобный Pig Latin, поскольку синтаксис хорошо представлен в общедоступных репозиториях. Однако он придумывает имена функций и несоответствует позициям полей, поэтому перед тем, как доверять сгенерированному скрипту, запустите DESCRIBE и ILLUSTRATE на примере.

Pig выполняется только тогда, когда оператор принудительно выполняет материализацию. Цепочка операторов LOAD и FOREACH проверяется, но никогда не выполняется до тех пор, пока не последует DUMP или STORE, поэтому скрипт, завершающийся после преобразования, завершается молча.

Команда DUMP выводит информацию о местоположении в терминал и предназначена для тестирования. Команда STORE записывает информацию о местоположении в файловую систему с помощью функции сохранения, например, PigStorage. В производственных скриптах всегда следует использовать команду STORE.

Нет. Предложение AS является необязательным. Без него каждое поле загружается как байтовый массив и ссылается на него по позиции, например, $0 и $1. Объявление схемы просто делает скрипты читаемыми и позволяет Pig выполнять проверку типов на более ранних этапах.

Большинство новых трубопроводов начинают работу на SparkPig имеет более крупное сообщество и более богатые библиотеки. Pig остается целесообразным там, где уже существуют скрипты, где команда предпочитает синтаксис потока данных или где Pig работает на Spark через исполняемый файл Spark.

Sqoop импортирует реляционные таблицы, а Flume передает данные журналов в HDFS. Затем Pig преобразует полученные данные. Oozie объединяет этапы импорта, преобразования и экспорта в один запланированный рабочий процесс, поэтому конвейер повторяется без ручного запуска.

Подведем итог этой публикации следующим образом: