Hadoop Pig Tutorial: Hvad er Apache Pig? Architecture, Eksempel

โšก Smart opsummering

Apache Pig er en platform pรฅ hรธjt niveau til analyse af store datasรฆt pรฅ Hadoop, der parrer dataflowsproget Pig Latin med en runtime, der kompilerer hvert script til MapReduce, Tez eller ... Spark job automatisk.

  • ๐Ÿ”˜ To komponenter: Pig Latin leverer sproget, og Pig-kรธrselstiden omdanner hvert script til klyngejob.
  • โ˜‘๏ธ Udfรธrelsestyper: Nuvรฆrende udgivelser tilbyder seks exectyper valgt med -x-flaget, fra local til Spark.
  • โœ… Forudsรฆtninger: En fungerende Hadoop-installation plus Java, med HADOOP_HOME og JAVA_HOME eksporteret, skal fรธrst eksistere.
  • ๐Ÿงช Udarbejdet eksempel: Et script med fire sรฆtninger indlรฆser SalesJan2009.csv, grupperer det efter land og gemmer produktantallet.
  • ๐Ÿ› ๏ธ Datamodel: Skalรฆre typer plus tuple, bag og map lader Pig lรฆse indbyggede og lรธst strukturerede filer.
  • ๐Ÿ“ˆ Nuvรฆrende version: Apache Pig 0.18.0 ankom i september 2025 med Hadoop 3, Tez, Spark og Python 3 stรธtte.

Hadoop Pig-vejledning, der dรฆkker Apache Pig-arkitektur, installation og et fungerende Pig Latin-eksempel

Denne vejledning starter med ideen bag Apache Pig og gennemgรฅr derefter installationen og kรธrsel af et komplet latinsk Pig-script fra ende til anden.

Hvad er Apache Pig?

Gris er pรฅ hรธjt niveau programmeringssprog nyttig til analyse af store datasรฆt. Pig var et resultat af udviklingsindsatsen hos Yahoo!

I et MapReduce-framework skal programmer oversรฆttes til en rรฆkke Map- og Reduce-faser. Dette er dog ikke en programmeringsmodel, som dataanalytikere er bekendt med. Sรฅ for at bygge bro over dette hul, er der behov for en abstraction kaldet Pig blev bygget oven pรฅ Hadoop.

Apache Pig gรธr det muligt for folk at fokusere mere pรฅ at analysere store mรฆngder data og bruge mindre tid pรฅ at skrive MapReduce-programmer. Ligesom grise, der spiser hvad som helst, er programmeringssproget Apache Pig designet til at arbejde med alle former for data. Derfor navnet Pig! Projektets maskot nedenfor understreger det samme.

Tegneseriegris brugt som Apache Pig-maskot, der illustrerer, at Pig behandler enhver form for data

Projektet er stadig aktivt. Apache Pig 0.18.0 blev udgivet den 15. september 2025 og tilfรธjer understรธttelse af Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 og Python 3, ifรธlge Apache Pig-udgivelsessideGennemgangen nedenfor blev oprindeligt skrevet til den meget รฆldre 0.12.1-linje, sรฅ et par trin indeholder en bemรฆrkning, hvor en nuvรฆrende udgivelse opfรธrer sig anderledes.

Gris Architecture

Pigs arkitektur bestรฅr af to komponenter:

  1. Grise latin, som er et sprog
  2. Et runtime miljรธ, til at kรธre Pig Latin-programmer.

Et Pig Latin-program bestรฅr af en rรฆkke operationer eller transformationer, der anvendes pรฅ inputdataene for at producere output. Disse operationer beskriver en datastrรธm, der oversรฆttes til en eksekverbar reprรฆsentation af Hadoop Pig-eksekveringsmiljรธet. Nedenfor er resultaterne af disse transformationer en rรฆkke KortReducer job, som en programmรธr ikke er klar over. Sรฅ pรฅ en mรฅde giver Pig i Hadoop programmรธren mulighed for at fokusere pรฅ data snarere end pรฅ udfรธrelsens natur.

Pig Latin er et forholdsvis stift sprog, der bruger velkendte nรธgleord fra databehandling, f.eks. Join, Group og Filter. Diagrammet nedenfor tracsender et script fra Grunt-shellen gennem parseren, optimeringsprogrammet og compileren pรฅ sin vej til udfรธrelsesmotoren.

Apache Pig-arkitekturdiagram, der viser Pig Latin-scripts, der passerer gennem parseren, optimeringsvรฆrktรธjet og compileren til udfรธrelsesmotoren

Udfรธrelsestilstande

Pig i Hadoop har to udfรธrelsestilstande, og installationsgennemgangen lรฆngere nede bruger dem begge:

  1. Lokal tilstand: I denne tilstand kรธrer Hadoop Pig-sproget i en enkelt FMV og bruger det lokale filsystem. Denne tilstand er kun egnet til analyse af smรฅ datasรฆt ved hjรฆlp af Pig i Hadoop.
  2. MapReduce-tilstand: I denne tilstand oversรฆttes forespรธrgsler skrevet pรฅ Pig Latin til MapReduce-job og kรธres pรฅ en Hadoop-klynge (klyngen kan vรฆre pseudodistribueret eller fuldt distribueret). MapReduce-tilstand med en fuldt distribueret klynge er nyttig til at kรธre Pig pรฅ store datasรฆt.

De to er det klassiske par. Nuvรฆrende udgivelser eksponerer faktisk seks udfรธrelsestyper, eller exectyper, der hver isรฆr er valgt med det samme -x flag, som dokumenteret i Pig 0.18.0 Introduktionsvejledning.

Exectype Kommando Hvor arbejdet foregรฅr
Lokale gris -x lokal En enkelt JVM mod det lokale filsystem
Tez lokal gris -x tez_local En enkelt JVM, der bruger Tez-kรธrselstiden (eksperimentel)
Spark lokale gris -x spark_local En enkelt JVM, der bruger Spark kรธrselstid (eksperimentel)
KortReducer gris eller gris -x mapreduce En Hadoop-klynge med HDFS; dette er standardindstillingen
Tez gris -x tez En Hadoop-klynge, der kรธrer Tez-motoren
Spark gris -x gnist A Spark, YARN eller Mesos-klynge med HDFS

Latinske datatyper for grise og Operatorer

Fรธr man skriver et script, er det en god idรฉ at vide, hvad Pig kan indeholde, og hvad den kan gรธre ved det. Datamodellen er fuldt indlejret, hvilket gรธr det muligt for Pig at lรฆse logfiler og andet lรธst struktureret input, som en relationel tabel ville afvise.

Pig Latin tilbyder to familier af typer:

  • Skalรฆre typer: int, long, float, double, chararray, bytearray, boolean, datetime, biginteger og bigdecimal. Eksempelskriptet deklarerer senere hver kolonne som chararray.
  • Komplekse typer: a tupel er et ordnet sรฆt af felter og opfรธrer sig som en rรฆkke; taske er en uordnet samling af tupler og opfรธrer sig som en tabel; a kort er et sรฆt af nรธgle- og vรฆrdipar, hvis nรธgle skal vรฆre en chararray.

Operatรธrerne har et lille antal opgaver, og en hรฅndfuld af dem fรธrer nรฆsten alle rรธrledninger:

OperaTor Hvad gรธr den
Lร†S / OPBEVAR Lรฆs en relation fra filsystemet og skriv resultatet tilbage
FILTER Behold kun de tupler, der matcher en betingelse
FOREACH โ€ฆ GENERร‰R Arbejd kolonne for kolonne, og opbyg nye felter
GRUPPE / SAMGRUPPE Gruppรฉr รฉn relation, eller to eller flere relationer, efter en nรธgle
JOIN Kombinรฉr relationer med en indre eller ydre join
UNION / SPLIT Sammenfรธj relationer, eller opdel en i flere
SORTER EFTER / TYDELIG / GRร†NSE Sortรฉr, deduplikรฉr og begrรฆns antallet af tupler
DUMP / BESKRIV / FORKLAR / ILLUSTRER Inspicer resultater, skemaer, udfรธrelsesplaner og prรธvekรธrsler

De fire inspektionsoperatรธrer har ogsรฅ Grunt-genveje, hvilket sparer penge.ping under fejlfinding: \d til DUMP, \de for BESKRIV, \e for FORKLARING og \i til ILLUSTRER.

Forudsรฆtninger

Pig er et klientsidevรฆrktรธj. Det analyserer et script, planlรฆgger arbejdet og sender job, men det tilbyder ikke lagerplads eller en egen klynge, sรฅ der skal fรธrst findes en fungerende Hadoop-installation. Apache-kravlisten er kort.

Component Krav Hvorfor er det nรธdvendigt
Hadoop Hadoop 2.x eller 3.x, med HADOOP_HOME eksporteret Leverer HDFS og udfรธrelsesmotoren. Uden HADOOP_HOME falder Pig 0.18.0 tilbage til en indlejret Hadoop 2.7.3.
Java Java 1.7 eller nyere, med JAVA_HOME sat til installationsroden Pig og Hadoop-dรฆmonerne er Java programmer
Python (Valgfrit) Python 2.7 Kun nรธdvendigt til streaming Python brugerdefinerede funktioner
Myre (valgfrit) Myr 1.8 Kun nรธdvendigt ved opbygning eller rekompilering af Pig fra kildekode

To praktiske punkter fรธlger med den liste. For det fรธrste, kรธr alt som en Linux-bruger, der allerede har en hjemmemappe i HDFS og tilladelse til at skrive til den; denne vejledning bruger hduser, den konto, der blev oprettet under opsรฆtningen af โ€‹โ€‹Hadoop. For det andet skal du starte klyngen, fรธr du starter Pig i MapReduce-tilstand, da Pig fejler รธjeblikkeligt, hvis NameNode og ResourceManager er nede. Hvis Hadoop ikke er installeret endnu, skal du arbejde dig igennem hvordan man installerer Hadoop fรธrst.

Sรฅdan downloades og installeres Pig

Nu i denne Apache Pig-tutorial lรฆrer vi, hvordan du downloader og installerer Pig:

Fรธr vi starter med selve processen, skal du sรธrge for at have Hadoop installeret. Skift bruger til 'hduser' (id'et der blev brugt under konfigurationen af โ€‹โ€‹Hadoop; du kan skifte til det bruger-id der blev brugt under din egen Hadoop-konfiguration).

Terminalkommandoen skifter Linux-brugeren til hduser, fรธr Pig-installationen begynder

Trin 1) Download den seneste stabile udgave af Pig Hadoop fra et af de tilgรฆngelige spejlwebsteder pรฅ

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

Vรฆlg tar.gz-filen (og ikke src.tar.gz) for at downloade, som vist nedenfor.

Apache Pig udgiver downloadside med tar.gz-distributionen til at vรฆlge

Trin 2) Nรฅr downloadingen er fรฆrdig, skal du navigere til den mappe, der indeholder den downloadede tar-fil, og flytte tar-filen til den placering, hvor du vil konfigurere Pig Hadoop. I dette tilfรฆlde flytter vi til /usr/local.

Terminalen flytter den downloadede Pig tar-fil til mappen /usr/local

Flyt til den mappe, der skal indeholde Pig Hadoop-filerne.

cd /usr/local

Extracindholdet af tar-filen som nedenfor.

sudo tar -xvf pig-0.12.1.tar.gz

Terminal extracร…bn Pig-arkivet med kommandoen sudo tar -xvf

Trin 3) Rediger ~/.bashrc for at tilfรธje Pig-relaterede miljรธvariabler.

ร…bn ~/.bashrc-filen i en hvilken som helst teksteditor efter eget valg, og foretag รฆndringerne nedenfor.

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

Teksteditor, der viser eksportlinjerne PIG_HOME og PATH, som er tilfรธjet til bashrc-filen.

Trin 4) Opret nu kilde til denne miljรธkonfiguration ved hjรฆlp af kommandoen nedenfor.

. ~/.bashrc

Terminal sourcing af bashrc-filen, sรฅ de nye Pig-miljรธvariabler trรฆder i kraft

Trin 5) Vi skal rekompilere Pig for at understรธtte Hadoop 2.2.0.

Her er trinene til at gรธre dette.

Gรฅ til Pigs hjemmemappe.

cd $PIG_HOME

Installer Ant.

sudo apt-get install ant

Terminalinstallation af Apache Ant med apt-get som forberedelse til rekompilering af Pig

Bemรฆrk: Downloaden starter og vil tage tid afhรฆngigt af din internethastighed.

Genkompilรฉr Pig.

sudo ant clean jar-all -Dhadoopversion=23

Terminal, der kรธrer Ant-mรฅlet, som rekompilerer Pig til Hadoop 2-linjen

Bemรฆrk venligst, at der downloades flere komponenter i denne rekompileringsproces, sรฅ systemet skal vรฆre forbundet til internettet.

Hvis denne proces ogsรฅ sidder fast et sted, og du ikke ser nogen bevรฆgelse i kommandoprompten i mere end 20 minutter, skal du trykke pรฅ Ctrl + c og kรธre den samme kommando igen.

I vores tilfรฆlde tager det 20 minutter.

Terminaloutput fra Pig-rekompileringen, som tog omkring tyve minutter i dette eksempel

Dette rekompileringstrin tilhรธrer 0.12.1-รฆraen, hvor de leverede jar-filer blev bygget mod Hadoop 1 og -Dhadoopversion=23 flag skiftede Ant-bygget til Hadoop 0.23 og 2.x-linjen. Apache Pig 0.18.0 leverer binรฆre filer, der allerede kรธrer pรฅ Hadoop 2.7 og nyere samt Hadoop 3, sรฅ i en nuvรฆrende udgivelse kan du normalt udpakke tarballen og springe direkte til testen nedenfor.

Trin 6) Test Pig-installationen ved hjรฆlp af kommandoen

pig -help

Output fra pig -help-kommandoen, der viser Pig-kommandolinjeindstillingerne efter installation

Eksempel Pig Script

Nรฅr Pig er installeret, kรธrer resten af โ€‹โ€‹denne Apache Pig-vejledning et komplet script. Vi bruger Pig Scripts til at finde antallet af solgte produkter i hvert land.

Input: Vores inputdatasรฆt er en CSV-fil, SalgJan2009.csv.

Trin 1) Start Hadoop.

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

Trin 2) Pig i Big Data tager en fil fra HDFS i MapReduce-tilstand og gemmer resultaterne tilbage i HDFS.

Kopier filen SalesJan2009.csv (gemt pรฅ det lokale filsystem pรฅ adressen ~/input/SalesJan2009.csv) til HDFS-hjemmemappen (Hadoop Distributed File System).

Her i dette Apache Pig-eksempel er filen i mappen "input". Hvis filen er gemt et andet sted, skal du give den det navn i stedet.

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

Terminalkopiering af SalesJan2009.csv fra det lokale filsystem til HDFS

Kontroller, om filen rent faktisk blev kopieret eller ej.

$HADOOP_HOME/bin/hdfs dfs -ls /

HDFS-rodliste, der bekrรฆfter, at SalesJan2009.csv-filen blev kopieret

Trin 3) Grisekonfiguration.

Fรธrst skal du navigere til $PIG_HOME/conf og beholde en kopi af den originale egenskabsfil.

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

Terminalen sikkerhedskopierer pig.properties, fรธr Pig-konfigurationen redigeres

ร…bn pig.properties ved hjรฆlp af en teksteditor efter eget valg, og angiv logfilstien ved hjรฆlp af pig.logfile.

sudo gedit pig.properties

Konfigurationsfilen pig.properties รฅbnes i en teksteditor ved logfilindstillingen

Loggeren vil bruge denne fil til at logge fejl.

Trin 4) Kรธr kommandoen 'pig', som vil starte Pig-kommandoprompten, en interaktiv shell til Pig-forespรธrgsler.

pig

Grunt interaktiv shell starter efter at pig-kommandoen er kรธrt

Trin 5) I Grunt-kommandoprompten for Pig skal du udfรธre Pig-kommandoerne nedenfor i rรฆkkefรธlge.

โ€” A. Indlรฆs filen, der indeholder data.

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

Tryk pรฅ Enter efter denne kommando.

Grunt-shell accepterer LOAD-sรฆtningen, der lรฆser salgs-CSV'en ind i en relation

โ€” B. Gruppรฉr data efter feltet Land.

GroupByCountry = GROUP salesTable BY Country;

Grunt shell accepterer GROUP-sรฆtningen, der grupperer salgsrelationen efter land

โ€” C. For hver tuple i 'GroupByCountry' genereres den resulterende streng af formen Landets navn: Antal solgte produkter.

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

Tryk pรฅ Enter efter denne kommando.

Grunt-shell accepterer FOREACH GENERATE-sรฆtningen, der bygger strengen land og antal

โ€” D. Gem resultaterne af dataflowet i mappen 'pig_output_sales' pรฅ HDFS.

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

Grunt-shell accepterer STORE-sรฆtningen, der skriver output til pig_output_sales-mappen

Denne kommando vil tage noget tid at udfรธre. Nรฅr den er fรฆrdig, bรธr du se fรธlgende skรฆrm.

Konsolskรฆrmen vises, nรฅr STORE-kommandoen er fรฆrdigudfรธrt

Trin 6) Resultatet kan ses via kommandogrรฆnsefladen som

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

Kommandolinjeoutput fra resultatfilen, der viser solgte produkter pr. land

Resultaterne kan ogsรฅ ses via en webgrรฆnseflade.

ร…bn http://localhost:50070/ i en webbrowser.

Port 50070 er NameNode-webgrรฆnsefladen pรฅ Hadoop 2. Hadoop 3 flyttede den samme side til port 9870, sรฅ brug den adresse i stedet, hvis din klynge kรธrer Hadoop 3.

Hadoop NameNode webgrรฆnseflade, der bruges til at gennemse HDFS-filsystemet

Vรฆlg nu 'Gennemse filsystemet' og naviger op til /user/hduser/pig_output_sales.

HDFS-browser, der viser pig_output_sales-mappen under hduser-startstien.

ร…bn part-r-00000 for at lรฆse land- og produkt-antal-parrene, som scriptet producerede.

Browservisning af part-r-00000 outputfilen med lande- og produktantalpar

Apache Pig vs. Hive vs. MapReduce

Gris vurderes sjรฆldent alene. Det sรฆdvanlige spรธrgsmรฅl er, om et job hรธrer hjemme i Gris, i Hive eller i et hรฅndskrevet MapReduce-program, da alle tre ender som job pรฅ den samme klynge.

Aspect KortReducer (Java) Apache gris Apache Hive
grรฆnseflade Java API Pig Latin , et scriptsprog til dataflow HiveQL, en SQL-dialekt
Niveau af mavemusklertraction Lav Medium Hรธj
Typisk bruger Java developer Dataingeniรธr eller forsker Analytiker fortrolig med SQL
Data der passer Alt, hรฅndteret manuelt Struktureret og semistruktureret; skemaet er valgfrit ved indlรฆsning Strukturerede tabeller registreret i en metastore
Code bind De fleste linjer Fรฆrre linjer Fรฆrrest linjer for en forespรธrgsel
Kรธrer som Et MapReduce-job Kompilerer til MapReduce, Tez eller Spark job Kompilerer til MapReduce, Tez eller Spark job
Bedste ved Fuld kontrol og brugerdefineret logik Flertrins ETL-pipelines Ad hoc-forespรธrgsler og rapportering

I praksis er opdelingen ligetil. Brug Hive, nรฅr dataene allerede ligner en tabel, og spรธrgsmรฅlet ligner SQL. Brug Pig, nรฅr inputtet er rodet, nรฅr pipelinen er en kรฆde af transformationer snarere end en enkelt forespรธrgsel, eller nรฅr det samme script skal forgrene sig og genforenes. Brug kun MapReduce, nรฅr ingen af โ€‹โ€‹abs...traction kan udtrykke logikken, fordi linjeantallet vokser hurtigt.

Gris sidder ogsรฅ komfortabelt ved siden af โ€‹โ€‹resten af โ€‹โ€‹รธkosystemet. Sqoop og Flume land de rรฅ data, Pig eller Hive former dem, og en scheduler som f.eks. Apache Oozie kรฆder trinnene sammen til en gentagelig pipeline. For et bredere billede af, hvor disse vรฆrktรธjer passer ind, se vejledningen til big data og opsamlingen af big data-vรฆrktรธjerfor et kommercielt ETL-alternativ til hรฅndskrevne manuskripter, se Talent.

Ofte Stillede Spรธrgsmรฅl

Ja. Apache Pig 0.18.0 blev udgivet den 15. september 2025 og bragte understรธttelse af Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 og Python 3. Udviklingen er langsommere end i Yahoo!-รฅrene, men projektet er ikke pensioneret.

AI-assistenter udarbejder transformationslogik ud fra en simpel beskrivelse, foreslรฅr join-nรธgler, markerer skemaforskydninger mellem kรธrsler og opsummerer klyngelogfiler til en sandsynlig รฅrsag. Behandl outputtet som et fรธrste udkast, der stadig skal profileres mod reelle data.

Copilot producerer hurtigt plausibel Pig Latin, fordi syntaksen er godt reprรฆsenteret i offentlige arkiver. Den opfinder funktionsnavne og afviger fra feltpositioner, sรฅ kรธr DESCRIBE og ILLUSTRATE pรฅ et eksempel, fรธr du stoler pรฅ et genereret script.

Pig udfรธres kun, nรฅr en sรฆtning fremtvinger materialisering. En kรฆde af LOAD- og FOREACH-sรฆtninger valideres, men kรธres aldrig, fรธr en DUMP eller STORE fรธlger, sรฅ et script, der slutter efter en transformation, afsluttes lydlรธst.

DUMP udskriver en relation til terminalen og er beregnet til test. STORE skriver relationen til filsystemet via en store-funktion som f.eks. PigStorage. Produktionsscripts skal altid slutte med STORE.

Nej. AS-klausulen er valgfri. Uden den indlรฆses hvert felt som et bytearray og refereres til efter position, f.eks. $0 og $1. Deklarering af et skema gรธr blot scripts lรฆsbare og lader Pig typetjekke tidligere.

De fleste nye rรธrledninger starter kl. Spark, som har et stรธrre fรฆllesskab og rigere biblioteker. Pig forbliver fornuftig, hvor scripts allerede findes, hvor teamet foretrรฆkker en dataflow-syntaks, eller hvor Pig kรธrer pรฅ Spark gennem gnist-eksektypen.

Sqoop importerer relationelle tabeller, og Flume streamer logdata til HDFS. Pig transformerer derefter det, der er landet. Oozie kรฆder import-, transformations- og eksporttrinnene sammen til รฉn planlagt arbejdsgang, sรฅ pipelinen gentages uden manuelle kรธrsel.

Opsummer dette indlรฆg med: