Tutorial Hadoop Pig: Ce este Apache Pig? Architectură, Exemplu

⚡ Rezumat inteligent

Apache Pig este o platformă de nivel înalt pentru analiza seturilor mari de date pe Hadoop, care combină limbajul de flux de date Pig Latin cu un runtime care compilează fiecare script în MapReduce, Tez sau... Spark locuri de muncă automat.

  • 🔘 Două componente: Pig Latin furnizează limbajul, iar runtime-ul Pig transformă fiecare script în joburi de cluster.
  • ☑️ Tipuri de execuție: Versiunile actuale oferă șase tipuri de executare selectate cu indicatorul -x, de la local la Spark.
  • Cerințe preliminare: O instalare Hadoop funcțională plus Java, cu HADOOP_HOME și JAVA_HOME exportate, trebuie să existe mai întâi.
  • 🧪 Exemplu lucrat: Un script cu patru instrucțiuni încarcă fișierul SalesJan2009.csv, îl grupează după țară și stochează numărul de produse.
  • 🛠️ Modelul de date: Tipurile scalare plus tuplul, bag și map permit lui Pig să citească fișiere imbricate și slab structurate.
  • 📈 Versiune curentă: Apache Pig 0.18.0 a apărut în septembrie 2025 odată cu Hadoop 3, Tez, Spark și Python 3 suport.

Tutorial Hadoop Pig care acoperă arhitectura Apache Pig, instalarea și un exemplu Pig Latin funcțional

Acest tutorial începe cu ideea din spatele Apache Pig, apoi prezintă instalarea acestuia și rularea completă a unui Pig în alfabet latin, de la început până la sfârșit.

Ce este Apache Pig?

Porcul este un nivel înalt limbaj de programare util pentru analizarea seturilor mari de date. Pig a fost rezultatul eforturilor de dezvoltare de la Yahoo!

Într-un framework MapReduce, programele trebuie traduse într-o serie de etape Map și Reduce. Cu toate acestea, acesta nu este un model de programare cu care analiștii de date sunt familiarizați. Așadar, pentru a acoperi această lacună, un model abstracțiune numită Pig a fost construită deasupra Hadoop.

Apache Pig permite oamenilor să se concentreze mai mult pe analizarea seturilor de date în masă și să petreacă mai puțin timp scriind programe MapReduce. Similar porcilor, care mănâncă orice, limbajul de programare Apache Pig este conceput să lucreze cu orice tip de date. De aceea, numele, Pig! Mascota proiectului de mai jos subliniază același lucru.

Porc de desene animate folosit ca mascotă Apache Pig, ilustrând faptul că Pig procesează orice tip de date

Proiectul este încă activ. Apache Pig 0.18.0 a fost lansat pe 15 septembrie 2025 și adaugă suport pentru Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 și Python 3, conform Pagina de lansări Apache PigGhidul de mai jos a fost scris inițial pentru linia mult mai veche 0.12.1, așa că câțiva pași au o notă în care o versiune curentă se comportă diferit.

Porc Architectură

Arhitectura Pig este formată din două componente:

  1. Pasareasca, care este o limbă
  2. Un mediu de rulare, pentru rularea programelor Pig Latin.

Un program Pig Latin constă dintr-o serie de operații sau transformări care sunt aplicate datelor de intrare pentru a produce ieșire. Aceste operații descriu un flux de date care este tradus într-o reprezentare executabilă de către mediul de execuție Hadoop Pig. Mai jos, rezultatele acestor transformări sunt o serie de MapReduce locuri de muncă de care un programator nu este conștient. Așadar, într-un fel, Pig în Hadoop permite programatorului să se concentreze pe date, mai degrabă decât pe natura execuției.

Pig Latin este un limbaj relativ rigid care folosește cuvinte cheie familiare din procesarea datelor, de exemplu, Join, Group și Filter. Diagrama de mai jos traceste un script din shell-ul Grunt prin parser, optimizator și compilator în drumul său către motorul de execuție.

Diagrama arhitecturii Apache Pig care arată alfabetul latin Pig trecând prin parser, optimizator și compilator către motorul de execuție

Moduri de execuție

Pig în Hadoop are două moduri de execuție, iar tutorialul de instalare de mai jos le folosește pe ambele:

  1. Mod local: În acest mod, limbajul Hadoop Pig rulează într-un singur FMV și utilizează sistemul de fișiere local. Acest mod este potrivit doar pentru analiza seturilor de date mici folosind Pig în Hadoop.
  2. Mod MapReduce: În acest mod, interogările scrise în limbajul Pig Latin sunt traduse în joburi MapReduce și sunt rulate pe un cluster Hadoop (clusterul poate fi pseudo-distribuit sau complet distribuit). Modul MapReduce cu un cluster complet distribuit este util pentru rularea Pig pe seturi de date mari.

Acelea două sunt perechea clasică. Versiunile actuale expun de fapt șase tipuri de execuție, sau execttypes, fiecare selectat cu aceleași -x steag, așa cum este documentat în Ghid introductiv pentru Pig 0.18.0.

Tip de execuție Comandă Unde se desfășoară lucrarea
Local porc -x local O singură JVM împotriva sistemului de fișiere local
Tez local pig -x tez_local O singură JVM folosind runtime-ul Tez (experimental)
Spark local pig -x spark_local O singură JVM care utilizează Spark timp de execuție (experimental)
MapReduce porc sau porc -x mapreduce Un cluster Hadoop cu HDFS; aceasta este setarea implicită
Tez porc -x tez Un cluster Hadoop care rulează motorul Tez
Spark scânteie de porc -x A Spark, Cluster YARN sau Mesos cu HDFS

Tipuri de date latine pentru porci și Operatori

Înainte de a scrie un script, este util să știi ce poate stoca Pig și ce poate face cu acesta. Modelul de date este complet imbricat, ceea ce permite lui Pig să citească fișiere jurnal și alte intrări structurate slab pe care un tabel relațional le-ar respinge.

Pig Latin oferă două familii de tipuri:

  • Tipuri scalare: int, long, float, double, chararray, bytearray, boolean, datetime, biginteger și bigdecimalScriptul exemplu de mai târziu declară fiecare coloană ca chararray.
  • Tipuri complexe: a tuplu este un set ordonat de câmpuri și se comportă ca un rând; a sac este o colecție neordonată de tupluri și se comportă ca un tabel; a Hartă este un set de perechi cheie-valoare a căror cheie trebuie să fie o chararray.

Operatorii au un număr mic de locuri de muncă, iar câțiva dintre ei transportă aproape fiecare conductă:

OperaTdR Ce face
ÎNCĂRCARE / DEPOZITARE Citește o relație din sistemul de fișiere și scrie rezultatul înapoi
FILTRU Păstrați doar tuplurile care îndeplinesc o condiție
PENTRU FIECARE … GENERARE Lucrați coloană cu coloană, construind câmpuri noi
GRUP / COGRUP Grupează o relație sau două sau mai multe relații după o cheie
JOIN Combinarea relațiilor cu o joncțiune internă sau externă
UNIUNE / DESPARTIRE Îmbinarea relațiilor sau împărțirea uneia în mai multe
ORDINE DUPĂ / DISTINCT / LIMITĂ Sortarea, deduplicarea și limitarea numărului de tupluri
A DESCARCA / A DESCRIE / A EXPLICA / A ILUSTRA Inspectați rezultatele, schemele, planurile de execuție și rulările de eșantionare

Cei patru operatori de inspecție au și ei scurtături Grunt, ceea ce economisește timp.ping în timpul depanării: \d pentru DEPOZITARE, \de pentru DESCRIERE, \e pentru EXPLICAȚI și \i pentru ILLUSTRATE.

Cerințe preliminare

Pig este un instrument client-side. Acesta analizează un script, planifică munca și trimite joburi, dar nu oferă spațiu de stocare sau un cluster propriu, așa că trebuie să existe mai întâi o instalare Hadoop funcțională. Lista de cerințe Apache este scurtă.

Component Cerinţă De ce este nevoie
Hadoop Hadoop 2.x sau 3.x, cu HADOOP_HOME exportat Furnizează HDFS și motorul de execuție. Fără HADOOP_HOME, Pig 0.18.0 folosește un Hadoop 2.7.3 încorporat.
Java Java 1.7 sau o versiune ulterioară, cu JAVA_HOME setat la rădăcina de instalare Pig și daemonii Hadoop sunt Java programe
Python (Opțional) Python 2.7 Necesar doar pentru streaming Python funcții definite de utilizator
Furnică (opțional) Furnica 1.8 Necesar doar la construirea sau recompilarea Pig din sursă

Două aspecte practice se adaugă la această listă. În primul rând, rulați totul ca utilizator Linux care are deja un director principal în HDFS și permisiunea de a scrie în acesta; acest tutorial folosește hduser, contul creat în timpul configurării Hadoop. În al doilea rând, porniți clusterul înainte de a lansa Pig în modul MapReduce, deoarece Pig eșuează imediat dacă NameNode și ResourceManager nu sunt disponibile. Dacă Hadoop nu este încă instalat, continuați cu cum se instalează Hadoop mai întâi.

Cum să descărcați și să instalați Pig

Acum, în acest tutorial Apache Pig, vom învăța cum să descărcați și să instalați Pig:

Înainte de a începe procesul propriu-zis, asigurați-vă că aveți Hadoop instalat. Schimbați numele utilizatorului în „hduser” (ID-ul folosit la configurarea Hadoop; puteți comuta la ID-ul de utilizator folosit în timpul propriei configurări Hadoop).

Comandă terminal care schimbă utilizatorul Linux în hduser înainte de începerea instalării Pig

Pas 1) Descărcați cea mai recentă versiune stabilă de Pig Hadoop de pe oricare dintre site-urile mirror disponibile la

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

Selectați fișierul tar.gz (și nu src.tar.gz) pentru descărcare, așa cum se arată mai jos.

Apache Pig lansează o pagină de descărcare cu distribuția tar.gz pentru a selecta

Pas 2) După finalizarea descărcării, navigați la directorul care conține fișierul tar descărcat și mutați fișierul tar în locația unde doriți să configurați Pig Hadoop. În acest caz, vom muta fișierul în /usr/local.

Terminalul mută fișierul tar Pig descărcat în directorul /usr/local

Mutați-vă în directorul care va conține fișierele Pig Hadoop.

cd /usr/local

Extracconținutul fișierului tar după cum urmează.

sudo tar -xvf pig-0.12.1.tar.gz

Terminal extracexecuția arhivei Pig cu comanda sudo tar -xvf

Pas 3) Modificați ~/.bashrc pentru a adăuga variabile de mediu legate de Pig.

Deschideți fișierul ~/.bashrc în orice editor de text la alegere și faceți modificările de mai jos.

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

Editor de text care afișează liniile de export PIG_HOME și PATH adăugate la fișierul bashrc

Pas 4) Acum, configurați această configurație de mediu folosind comanda de mai jos.

. ~/.bashrc

Terminalul generează fișierul bashrc pentru ca noile variabile de mediu Pig să aibă efect

Pas 5) Trebuie să recompilăm Pig pentru a oferi suport pentru Hadoop 2.2.0.

Iată pașii pentru a face acest lucru.

Accesați directorul principal Pig.

cd $PIG_HOME

Instalați Ant.

sudo apt-get install ant

Instalarea Apache Ant în terminal cu apt-get în pregătirea recompilării Pig

Notă: Descărcarea va începe și va consuma timp în funcție de viteza conexiunii la internet.

Recompilează Pig.

sudo ant clean jar-all -Dhadoopversion=23

Terminal care rulează ținta Ant ce recompilează Pig pentru linia Hadoop 2

Rețineți că în acest proces de recompilare sunt descărcate mai multe componente, așadar sistemul trebuie să fie conectat la internet.

De asemenea, în cazul în care acest proces se blochează undeva și nu vedeți nicio mișcare în linia de comandă timp de mai mult de 20 de minute, apăsați Ctrl + c și rulați din nou aceeași comandă.

În cazul nostru, durează 20 de minute.

Ieșirea terminalului de la recompilarea Pig, care a durat aproximativ douăzeci de minute în acest exemplu

Această etapă de recompilare aparține erei 0.12.1, când versiunile JAR livrate au fost construite pentru Hadoop 1 și -Dhadoopversion=23 flag a schimbat versiunea Ant la linia Hadoop 0.23 și 2.x. Apache Pig 0.18.0 livrează binare care rulează deja pe Hadoop 2.7 și versiuni ulterioare, precum și pe Hadoop 3, așa că pe o versiune curentă puteți dezarhiva în mod normal arhiva tarball și să treceți direct la testul de mai jos.

Pas 6) Testați instalarea Pig folosind comanda

pig -help

Rezultatul comenzii pig -help care listează opțiunile din linia de comandă Pig după instalare

Exemplu de Script Pig

Cu Pig instalat, restul acestui tutorial Apache Pig rulează un script complet. Vom folosi scripturi Pig pentru a afla numărul de produse vândute în fiecare țară.

Intrare: Setul nostru de date de intrare este un fișier CSV, VânzăriJan2009.csv.

Pas 1) Porniți Hadoop.

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

Pas 2) Pig în Big Data preia un fișier din HDFS în modul MapReduce și stochează rezultatele înapoi în HDFS.

Copiați fișierul SalesJan2009.csv (stocat în sistemul de fișiere local la ~/input/SalesJan2009.csv) în directorul principal HDFS (Hadoop Distributed File System).

Aici, în acest exemplu Apache Pig, fișierul se află în folderul input. Dacă fișierul este stocat într-o altă locație, dați-i acel nume în schimb.

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

Terminalul copiază fișierul SalesJan2009.csv din sistemul de fișiere local în HDFS

Verificați dacă fișierul a fost într-adevăr copiat sau nu.

$HADOOP_HOME/bin/hdfs dfs -ls /

Listarea rădăcină HDFS care confirmă că fișierul SalesJan2009.csv a fost copiat

Pas 3) Configurația porcului.

Mai întâi, navigați la $PIG_HOME/conf și păstrați o copie a fișierului de proprietăți original.

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

Terminalul face o copie de rezervă a fișierului pig.properties înainte de editarea configurației Pig

Deschideți fișierul pig.properties folosind un editor de text la alegere și specificați calea fișierului jurnal folosind pig.logfile.

sudo gedit pig.properties

Fișierul de configurare pig.properties se deschide într-un editor de text la setarea fișierului jurnal

Loggerul va folosi acest fișier pentru a înregistra erorile.

Pas 4) Rulați comanda „pig”, care va porni promptul de comandă Pig, un shell interactiv pentru interogările Pig.

pig

Shell interactiv Grunt pornește după rularea comenzii pig

Pas 5) În linia de comandă Grunt pentru Pig, executați comenzile Pig de mai jos în ordine.

— A. Încărcați fișierul care conține date.

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);

Apăsați Enter după această comandă.

Shell-ul Grunt acceptă instrucțiunea LOAD care citește fișierul CSV de vânzări într-o relație

— B. Grupați datele după câmpul Țară.

GroupByCountry = GROUP salesTable BY Country;

Shell-ul Grunt acceptă instrucțiunea GROUP care grupează relația de vânzări pe țări

— C. Pentru fiecare tuplu din „GroupByCountry”, generați șirul rezultat de forma Numele țării: Nr. de produse vândute.

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

Apăsați Enter după această comandă.

Shell Grunt care acceptă instrucțiunea FOREACH GENERATE care construiește șirul de numere pentru țară și numărătoare.

— D. Stocați rezultatele fluxului de date în directorul „pig_output_sales” pe HDFS.

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

Shell-ul Grunt acceptă instrucțiunea STORE care scrie ieșirea în directorul pig_output_sales

Executarea acestei comenzi va dura ceva timp. După finalizare, ar trebui să vedeți următorul ecran.

Ecranul consolei afișat după ce comanda STORE a terminat de executat

Pas 6) Rezultatul poate fi văzut prin interfața de comandă ca

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

Rezultatul fișierului rezultat din linia de comandă care listează produsele vândute pe țări

Rezultatele pot fi vizualizate și prin intermediul unei interfețe web.

Deschideți http://localhost:50070/ într-un browser web.

Portul 50070 este interfața web NameNode pe Hadoop 2. Hadoop 3 a mutat aceeași pagină pe portul 9870, așa că folosiți acea adresă dacă clusterul dvs. rulează Hadoop 3.

Interfața web Hadoop NameNode utilizată pentru navigarea prin sistemul de fișiere HDFS

Acum selectați „Răsfoiți sistemul de fișiere” și navigați până la /user/hduser/pig_output_sales.

Browser HDFS care afișează directorul pig_output_sales sub calea principală hduser

Deschideți part-r-00000 pentru a citi perechile țară și număr-produs produse de script.

Vizualizare în browser a fișierului de ieșire part-r-00000 cu perechi de țări și număr de produse

Apache Pig vs. Hive vs. MapReduce

Pig este rareori evaluat de unul singur. Întrebarea obișnuită este dacă un loc de muncă își are locul în Pig, în Stup sau într-un program MapReduce scris de mână, deoarece toate trei ajung ca joburi pe același cluster.

Aspect Reducerea Hărții (Java) Porc Apache Apache Hive
interfaţă Java API Pig Latin, un limbaj de scripting pentru fluxuri de date HiveQL, un dialect SQL
Nivelul abdomenuluitracTION Scăzut Mediu Înalt
Utilizator tipic Java dezvoltator Inginer sau cercetător de date Analist familiarizat cu SQL
Datele care se potrivesc Orice, manipulat manual Structurat și semi-structurat; schema este opțională la momentul încărcării Tabele structurate înregistrate într-un metastore
Code volum Majoritatea liniilor Mai puține linii Cele mai puține linii pentru o interogare
Rulează ca O lucrare MapReduce Compilează în MapReduce, Tez sau Spark de locuri de muncă Compilează în MapReduce, Tez sau Spark de locuri de muncă
Cel mai bun la Control deplin și logică personalizată Conducte ETL cu mai mulți pași Interogare și raportare ad-hoc

În practică, divizarea este simplă. Apelați la Hive când datele arată deja ca un tabel, iar întrebarea arată ca SQL. Apelați la Pig când datele de intrare sunt dezordonate, când canalul este un lanț de transformări în loc de o singură interogare sau când același script trebuie să se ramifice și să se reunească. Apelați la MapReduce doar când niciuna dintre absențe nu...tracțiunea poate exprima logica, deoarece numărul de linii crește rapid.

Porcul stă confortabil, de asemenea, lângă restul ecosistemului. Sqoop și Flume aterizează datele brute, Pig sau Hive le modelează și un planificator precum Apache Oozie înlănțuie pașii într-o conductă repetabilă. Pentru o imagine mai amplă a locului în care se încadrează aceste instrumente, consultați ghidul pentru Datele mari și rezumatul instrumente de date mari; pentru o alternativă ETL comercială la scripturile scrise de mână, vezi Talend.

Întrebări frecvente

Da. Apache Pig 0.18.0 a fost lansat pe 15 septembrie 2025 și a adus suport pentru Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 și Python 3. Dezvoltarea este mai lentă decât în ​​anii Yahoo!, dar proiectul nu este retras.

Asistenții inteligenți artificiali elaborează logica de transformare dintr-o descriere simplă, sugerează chei de joncțiune, semnalează abaterile de la schemă între rulări și rezumă jurnalele clusterului într-o cauză probabilă. Tratați rezultatul ca o primă schiță care necesită încă profilare în raport cu datele reale.

Copilot produce rapid un limbaj Pig Latin plauzibil, deoarece sintaxa este bine reprezentată în repozitoriile publice. Inventează nume de funcții și poziții de câmp care nu corespund, așa că rulează DESCRIBE și ILLUSTRATE pe un exemplu înainte de a avea încredere într-un script generat.

Pig se execută doar atunci când o instrucțiune forțează materializarea. Un lanț de instrucțiuni LOAD și FOREACH este validat, dar nu rulează niciodată până când nu urmează o instrucțiune DUMP sau STORE, așadar un script care se termină după o transformare se termină silențios.

DUMP imprimă o relație către terminal și este destinată testării. STORE scrie relația către sistemul de fișiere printr-o funcție de stocare, cum ar fi PigStorage. Scripturile de producție ar trebui să se termine întotdeauna cu STORE.

Nu. Clauza AS este opțională. Fără ea, fiecare câmp este încărcat ca bytearray și referențiat după poziție, cum ar fi $0 și $1. Declararea unei scheme face pur și simplu scripturile lizibile și permite lui Pig să verifice tipul mai devreme.

Majoritatea conductelor noi încep pe Spark, care are o comunitate mai mare și biblioteci mai bogate. Pig rămâne o opțiune rezonabilă acolo unde există deja scripturi, unde echipa preferă o sintaxă de flux de date sau unde Pig rulează pe Spark prin intermediul exectipulului scânteii.

Sqoop importă tabele relaționale, iar Flume transmite datele jurnalelor în HDFS. Pig transformă apoi tot ce a aterizat. Oozie înlănțuie pașii de import, transformare și export într-un singur flux de lucru programat, astfel încât fluxul de lucru se repetă fără rulări manuale.

Rezumați această postare cu: