Урок за Hadoop Pig: Какво е Apache Pig? Archiтектура, Пример
⚡ Умно обобщение
Apache Pig е платформа на високо ниво за анализ на големи масиви от данни в Hadoop, съчетаваща езика за поток от данни Pig Latin с среда за изпълнение, която компилира всеки скрипт в MapReduce, Tez или... Spark задачи автоматично.
Този урок започва с идеята зад Apache Pig, след което преминава през инсталирането му и изпълнението на пълна латинска писменост на Pig от край до край.
Какво е Apache Pig?
Прасето е високо ниво програмен език полезен за анализ на големи масиви от данни. Pig е резултат от усилията за разработка в Yahoo!
В рамките на MapReduce, програмите трябва да бъдат преведени в серия от етапи Map и Reduce. Това обаче не е програмен модел, с който анализаторите на данни са запознати. Така че, за да се преодолее тази празнина, е необходим ABS...tracнаречена Pig, е построена върху 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 се състои от два компонента:
- свинска латиница, което е език
- среда за изпълнение, за провеждане на програми по латински език на прасета.
Програмата на Pig Latin се състои от поредица от операции или трансформации, които се прилагат към входните данни, за да се получи изход. Тези операции описват поток от данни, който се преобразува в изпълнимо представяне от средата за изпълнение на Hadoop Pig. По-долу резултатите от тези трансформации са поредица от MapReduce задачи, за които програмистът не е запознат. Така че, по някакъв начин, Pig в Hadoop позволява на програмиста да се съсредоточи върху данните, а не върху естеството на изпълнението.
Pig Latin е сравнително ригиден език, който използва познати ключови думи от обработката на данни, например Join, Group и Filter. Диаграмата по-долу tracпредава скрипт от Grunt shell-а през парсера, оптимизатора и компилатора по пътя му към изпълнителния механизъм.
Режими на изпълнение
Pig в Hadoop има два режима на изпълнение и по-долу в ръководството за инсталиране се използват и двата:
- Локален режим: В този режим езикът Hadoop Pig работи в един JVM и използва локалната файлова система. Този режим е подходящ само за анализ на малки набори от данни, използвайки Pig в Hadoop.
- Режим 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).
Стъпка 1) Изтеглете най-новата стабилна версия на Pig Hadoop от някой от огледалните сайтове, достъпни на
https://pig.apache.org/releases.html
Изберете файла tar.gz (а не src.tar.gz) за изтегляне, както е показано по-долу.
Стъпка 2) След като изтеглянето приключи, отидете в директорията, съдържаща изтегления tar файл, и го преместете на мястото, където искате да инсталирате Pig Hadoop. В този случай ще го преместим в /usr/local.
Преместете се в директорията, която ще съдържа файловете на Pig Hadoop.
cd /usr/local
Extracсъдържанието на tar файла, както е показано по-долу.
sudo tar -xvf pig-0.12.1.tar.gz
Стъпка 3) Променете ~/.bashrc, за да добавите променливи на средата, свързани с Pig.
Отворете файла ~/.bashrc във всеки текстов редактор по ваш избор и направете промените по-долу.
export PIG_HOME=<Installation directory of Pig> export PATH=$PIG_HOME/bin:$HADOOP_HOME/bin:$PATH
Стъпка 4) Сега, извлечете тази конфигурация на средата, като използвате командата по-долу.
. ~/.bashrc
Стъпка 5) Трябва да прекомпилираме Pig, за да поддържа Hadoop 2.2.0.
Ето стъпките за това.
Отидете в началната директория на Pig.
cd $PIG_HOME
Инсталирайте Ant.
sudo apt-get install ant
Забележка: Изтеглянето ще започне и ще отнеме време в зависимост от скоростта на вашия интернет.
Прекомпилирайте Pig.
sudo ant clean jar-all -Dhadoopversion=23
Моля, обърнете внимание, че в този процес на рекомпилация се изтеглят множество компоненти, така че системата трябва да е свързана с интернет.
Също така, в случай че този процес заседне някъде и не видите никакво движение в командния ред повече от 20 минути, натиснете Ctrl + c и изпълнете отново същата команда.
В нашия случай това отнема 20 минути.
Тази стъпка на рекомпилация принадлежи към ерата 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 е инсталиран, останалата част от този урок за 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 /
Проверете дали файлът действително е копиран или не.
$HADOOP_HOME/bin/hdfs dfs -ls /
Стъпка 3) Конфигурация на прасе.
Първо, отидете в $PIG_HOME/conf и запазете копие на оригиналния файл със свойства.
cd $PIG_HOME/conf
sudo cp pig.properties pig.properties.original
Отворете pig.properties с помощта на текстов редактор по ваш избор и укажете пътя до лог файла, използвайки pig.logfile.
sudo gedit pig.properties
Логерът ще използва този файл, за да регистрира грешки.
Стъпка 4) Изпълнете командата „pig“, която ще стартира командния ред Pig, интерактивна обвивка за заявки към Pig.
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 след тази команда.
— Б. Групирайте данните по полето „Държава“.
GroupByCountry = GROUP salesTable BY Country;
— C. За всеки кортеж в „GroupByCountry“ генерирайте получения низ във вида Име на държавата: Брой продадени продукти.
CountByCountry = FOREACH GroupByCountry GENERATE CONCAT((chararray)$0,CONCAT(':',(chararray)COUNT($1)));
Натиснете Enter след тази команда.
— D. Съхранявайте резултатите от потока от данни в директорията „pig_output_sales“ на HDFS.
STORE CountByCountry INTO 'pig_output_sales' USING PigStorage('\t');
Изпълнението на тази команда ще отнеме известно време. След като бъде готова, би трябвало да видите следния екран.
Стъпка 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.
Сега изберете „Преглед на файловата система“ и отидете до /user/hduser/pig_output_sales.
Отворете 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 алтернатива на ръкописните скриптове вижте Таленд.























