Урок за 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, групира го по държава и съхранява броя на продуктите.
  • 🛠️ Модел на данни: Скаларните типове плюс tuple, bag и map позволяват на Pig да чете вложени и свободно структурирани файлове.
  • 📈 Сегашна версия: Apache Pig 0.18.0 пристигна през септември 2025 г. с Hadoop 3, Tez, Spark намлява Python 3 подкрепа.

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

Този урок започва с идеята зад Apache Pig, след което преминава през инсталирането му и изпълнението на пълна латинска писменост на Pig от край до край.

Какво е Apache Pig?

Прасето е високо ниво програмен език полезен за анализ на големи масиви от данни. Pig е резултат от усилията за разработка в Yahoo!

В рамките на MapReduce, програмите трябва да бъдат преведени в серия от етапи Map и Reduce. Това обаче не е програмен модел, с който анализаторите на данни са запознати. Така че, за да се преодолее тази празнина, е необходим ABS...tracнаречена Pig, е построена върху Hadoop.

Apache Pig позволява на хората да се съсредоточат повече върху анализа на големи масиви от данни и да прекарват по-малко време в писане на MapReduce програми. Подобно на прасетата, които ядат всичко, езикът за програмиране Apache Pig е проектиран да работи с всякакъв вид данни. Ето защо името „Pig“ (Прасе) е истина. Талисманът на проекта по-долу изразява същата гледна точка.

Карикатурно прасе, използвано като талисман на 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. По-долу резултатите от тези трансформации са поредица от MapReduce задачи, за които програмистът не е запознат. Така че, по някакъв начин, Pig в Hadoop позволява на програмиста да се съсредоточи върху данните, а не върху естеството на изпълнението.

Pig Latin е сравнително ригиден език, който използва познати ключови думи от обработката на данни, например Join, Group и Filter. Диаграмата по-долу tracпредава скрипт от Grunt shell-а през парсера, оптимизатора и компилатора по пътя му към изпълнителния механизъм.

Диаграма на архитектурата на Apache Pig, показваща преминаването на латинските писмености на Pig през парсера, оптимизатора и компилатора към изпълнителния механизъм.

Режими на изпълнение

Pig в Hadoop има два режима на изпълнение и по-долу в ръководството за инсталиране се използват и двата:

  1. Локален режим: В този режим езикът Hadoop Pig работи в един JVM и използва локалната файлова система. Този режим е подходящ само за анализ на малки набори от данни, използвайки Pig в Hadoop.
  2. Режим MapReduce: В този режим заявките, написани на Pig Latin, се преобразуват в MapReduce задачи и се изпълняват на Hadoop клъстер (клъстерът може да бъде псевдоразпределен или напълно разпределен). Режимът MapReduce с напълно разпределен клъстер е полезен за изпълнение на Pig върху големи набори от данни.

Тези две са класическата двойка. Текущите версии всъщност предоставят шест типа изпълнение или exectypes, всеки избран със същия -x флаг, както е документирано в Ръководство за първи стъпки на Pig 0.18.0.

Тип на изпълнение Команда Къде се извършва работата
местен прасе -x местен Една JVM срещу локалната файлова система
Tez local прасе -x tez_local Една JVM, използваща Tez runtime (експериментална)
Spark местен прасе -x spark_local Единична JVM, използваща Spark време на изпълнение (експериментално)
MapReduce прасе или прасе -x mapreduce Hadoop клъстер с HDFS; това е настройката по подразбиране
Тез прасе -x tez Hadoop клъстер, работещ с Tez енджин
Spark прасе -x искра A Spark, YARN или Mesos клъстер с HDFS

Типове данни за прасета и латински език Operaтори

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

Pig Latin предлага две семейства типове:

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

Операторите попадат в малък брой задачи, като шепа от тях изпълняват почти всеки тръбопровод:

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

Четиримата оператори на инспекция също имат Grunt преки пътища, което спестява време.ping по време на отстраняване на грешки: \d за DUMP, \de за ОПИСВАНЕ, \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, акаунтът, създаден по време на настройката на Hadoop. Второ, стартирайте клъстера, преди да стартирате 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

Терминал extracархивиране на 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) Сега, извлечете тази конфигурация на средата, като използвате командата по-долу.

. ~/.bashrc

Терминалът извлича 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 target, който прекомпилира Pig за Hadoop 2 линията

Моля, обърнете внимание, че в този процес на рекомпилация се изтеглят множество компоненти, така че системата трябва да е свързана с интернет.

Също така, в случай че този процес заседне някъде и не видите никакво движение в командния ред повече от 20 минути, натиснете Ctrl + c и изпълнете отново същата команда.

В нашия случай това отнема 20 минути.

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

Тази стъпка на рекомпилация принадлежи към ерата 0.12.1, когато изпратените jar файлове бяха изградени спрямо Hadoop 1 и -Dhadoopversion=23 flag превключи Ant компилацията към Hadoop 0.23 и 2.x линията. Apache Pig 0.18.0 доставя двоични файлове, които вече работят на Hadoop 2.7 и по-нови версии, както и на Hadoop 3, така че в текущата версия обикновено можете да разопаковате tarball-а и да преминете директно към теста по-долу.

Стъпка 6) Тествайте инсталацията на Pig с помощта на командата

pig -help

Изход от командата pig -help, изброяващ опциите на командния ред на Pig след инсталирането

Примерен скрипт за прасе

След като Pig е инсталиран, останалата част от този урок за Apache Pig ще изпълнява пълен скрипт. Ще използваме Pig Scripts, за да намерим броя на продадените продукти във всяка държава.

Вход: Нашият набор от входни данни е CSV файл, SalesJan2009.csv.

Стъпка 1) Стартирайте Hadoop.

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

Стъпка 2) Pig in Big Data взема файл от 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 shell приема 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 shell приема FOREACH GENERATE оператора, който изгражда низовете count и count.

— D. Съхранявайте резултатите от потока от данни в директорията „pig_output_sales“ на HDFS.

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

Grunt shell приема 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

Прасето рядко се оценява самостоятелно. Обичайният въпрос е дали една работа е място в Прасето, в Кошер или в ръчно написана MapReduce програма, тъй като и трите се оказват задачи в един и същ клъстер.

Аспект MapReduce (Java) Апач прасе Apache Hive
Interface Java API Pig Latin, скриптов език за управление на потока от данни HiveQL, SQL диалект
Ниво на коремните мускулиtracАЦИ ниско Среден Високо
Типичен потребител Java предприемач Инженер на данни или изследовател Анализатор, разбиращ SQL
Данни, които отговарят Всичко, обработвано ръчно Структурирани и полуструктурирани; схемата е по избор по време на зареждане Структурирани таблици, регистрирани в метахранилище
Code сила на звука Повечето линии По-малко редове Най-малко редове за заявка
Изпълнява се като Задача на MapReduce Компилира се в MapReduce, Tez или Spark работни места Компилира се в MapReduce, Tez или Spark работни места
Най-добър в Пълен контрол и персонализирана логика Многостъпкови ETL тръбопроводи Ad hoc заявки и отчети

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

Прасето също седи удобно до останалата част от екосистемата. Sqoop и Flume приземяват суровите данни, Pig или Hive ги оформят и планировчик, като например Апачи Оози свързва стъпките в повтаряем конвейер. За по-широката картина на това къде се вписват тези инструменти, вижте ръководството за голямо количество от данни и обобщението на инструменти за големи данни; за търговска ETL алтернатива на ръкописните скриптове вижте Таленд.

Въпроси и Отговори

Да. 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 е незадължителна. Без нея всяко поле се зарежда като bytearray и се цитира по позиция, например $0 и $1. Декларирането на схема просто прави скриптовете четливи и позволява на Pig да извършва типова проверка по-рано.

Повечето нови тръбопроводи започват на Spark, която има по-голяма общност и по-богати библиотеки. Pig остава разумен, когато вече съществуват скриптове, където екипът предпочита синтаксис на потока от данни или където Pig работи на Spark чрез екзекуционния тип на Spark.

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

Обобщете тази публикация с: