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

⚡ Smart oppsummering

Apache Pig er en plattform på høyt nivå for å analysere store datasett på Hadoop, og kobler dataflytspråket Pig Latin med en kjøretid som kompilerer hvert skript til MapReduce, Tez eller Spark jobber automatisk.

  • 🔘 To komponenter: Pig Latin leverer språket, og Pig-kjøretiden gjør om hvert skript til klyngejobber.
  • ☑️ Utførelsestyper: Nåværende utgivelser tilbyr seks eksekveringstyper valgt med -x-flagget, fra lokal til Spark.
  • ✅ Forutsetninger: En fungerende Hadoop-installasjon pluss Java, med HADOOP_HOME og JAVA_HOME eksportert, må eksistere først.
  • 🧪 Utarbeidet eksempel: Et skript med fire setninger laster inn SalesJan2009.csv, grupperer det etter land og lagrer produktantallene.
  • 🛠️ Datamodell: Skalære typer pluss tuple, bag og map lar Pig lese nestede og løst strukturerte filer.
  • 📈 Gjeldende versjon: Apache Pig 0.18.0 kom i september 2025 med Hadoop 3, Tez, Spark og Python 3 støtte.

Hadoop Pig-veiledning som dekker Apache Pig-arkitektur, installasjon og et fungert Pig Latin-eksempel

Denne veiledningen starter med ideen bak Apache Pig, og går deretter gjennom installasjonen og kjøringen av et komplett latinsk Pig-skript fra ende til annen.

Hva er Apache Pig?

Gris er et høyt nivå programmeringsspråk nyttig for å analysere store datasett. Pig var et resultat av utviklingsarbeidet hos Yahoo!

I et MapReduce-rammeverk må programmer oversettes til en serie Map- og Reduce-faser. Dette er imidlertid ikke en programmeringsmodell som dataanalytikere er kjent med. Så for å bygge bro over dette gapet, er det nødvendig med en abstracsjon kalt Pig ble bygget oppå Hadoop.

Apache Pig lar folk fokusere mer på å analysere store datasett og bruke mindre tid på å skrive MapReduce-programmer. I likhet med griser, som spiser hva som helst, er programmeringsspråket Apache Pig designet for å jobbe med alle typer data. Det er derfor navnet Pig! Prosjektmaskoten nedenfor understreker det samme.

Tegneseriegris brukt som Apache Pig-maskoten, som illustrerer at Pig behandler alle slags data

Prosjektet er fortsatt aktivt. Apache Pig 0.18.0 ble utgitt 15. september 2025 og legger til støtte for Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 og Python 3, ifølge Apache Pig utgivelsessideGjennomgangen nedenfor ble opprinnelig skrevet mot den mye eldre 0.12.1-linjen, så noen få trinn inneholder en merknad der en nåværende utgivelse oppfører seg annerledes.

Pig Architecture

Arkitekturen til Pig består av to komponenter:

  1. Grise latin, som er et språk
  2. Et kjøretidsmiljø, for å kjøre Pig Latin-programmer.

Et Pig Latin-program består av en serie operasjoner eller transformasjoner som brukes på inndataene for å produsere utdata. Disse operasjonene beskriver en dataflyt som oversettes til en kjørbar representasjon av Hadoop Pig-utførelsesmiljøet. Under finner du resultatene av disse transformasjonene en serie med MapReduce jobber som en programmerer ikke er klar over. Så, på en måte, lar Pig i Hadoop programmereren fokusere på data snarere enn på utførelsens natur.

Pig Latin er et relativt rigid språk som bruker kjente nøkkelord fra databehandling, f.eks. Join, Group og Filter. Diagrammet nedenfor tracsender et skript fra Grunt-skallet gjennom parseren, optimalisereren og kompilatoren på vei til utførelsesmotoren.

Apache Pig-arkitekturdiagram som viser Pig Latin-skript som går gjennom parseren, optimalisereren og kompilatoren til utførelsesmotoren

Utførelsesmoduser

Pig i Hadoop har to utførelsesmoduser, og installasjonsgjennomgangen lenger ned bruker begge:

  1. Lokal modus: I denne modusen kjører Hadoop Pig-språket i én JVM og bruker det lokale filsystemet. Denne modusen er kun egnet for analyse av små datasett ved bruk av Pig i Hadoop.
  2. MapReduce-modus: I denne modusen blir spørringer skrevet på Pig Latin oversatt til MapReduce-jobber og kjøres på en Hadoop-klynge (klyngen kan være pseudodistribuert eller fullstendig distribuert). MapReduce-modus med en fullstendig distribuert klynge er nyttig for å kjøre Pig på store datasett.

Disse to er det klassiske paret. Nåværende utgivelser eksponerer faktisk seks utførelsestyper, eller eksekveringstyper, som hver er valgt med samme -x flagget, som dokumentert i Veiledning for å komme i gang med Pig 0.18.0.

Exectype Kommando Der arbeidet går
lokal gris -x lokal En enkelt JVM mot det lokale filsystemet
Tez lokalt gris -x tez_local En enkelt JVM som bruker Tez-kjøretiden (eksperimentell)
Spark lokal gris -x spark_local En enkelt JVM som bruker Spark kjøretid (eksperimentell)
MapReduce gris eller gris -x mapreduce En Hadoop-klynge med HDFS; dette er standardinnstillingen
avhandling gris -x tez En Hadoop-klynge som kjører Tez-motoren
Spark gris -x gnist A Spark, YARN eller Mesos-klynge med HDFS

Latinske datatyper for gris og Operatorer

Før du skriver et skript, er det nyttig å vite hva Pig kan holde og hva den kan gjøre med det. Datamodellen er fullstendig nestet, noe som lar Pig lese loggfiler og annen løst strukturert input som en relasjonstabell ville avvist.

Pig Latin tilbyr to familier av typer:

  • Skalære typer: int, long, float, double, chararray, bytearray, boolean, datetime, biginteger og bigdecimalEksempelskriptet deklarerer senere hver kolonne som chararray.
  • Komplekse typer: a tuppel er et ordnet sett med felt og oppfører seg som en rad; a veske er en uordnet samling av tupler og oppfører seg som en tabell; a kart er et sett med nøkkel- og verdipar hvis nøkkel må være en chararray.

Operatørene har et lite antall jobber, og en håndfull av dem fører nesten alle rørledninger:

Operator Hva det gjør
LAST / OPPREVAR Les en relasjon fra filsystemet og skriv resultatet tilbake
FILTER Behold bare tuplene som samsvarer med en betingelse
FOREACH … GENERER Arbeid kolonne for kolonne, og bygg nye felt
GRUPPE / SAMGRUPPE Grupper én relasjon, eller to eller flere relasjoner, etter en nøkkel
BLI Kombiner relasjoner med en indre eller ytre sammenføyning
UNION / SPLIT Slå sammen relasjoner, eller del én opp i flere
SORTER ETTER / TYDELIG / GRENSE Sorter, dedupliser og sett en grense for antall tupler
DUMP / BESKRIV / FORKLAR / ILLUSTRER Inspiser resultater, skjemaer, utførelsesplaner og prøvekjøringer

De fire inspeksjonsoperatørene har også Grunt-snarveier, noe som sparer degping under feilsøking: \d for DUMP, \de for BESKRIV, \e for FORKLARING og \i for ILLUSTRATE.

Forutsetninger

Pig er et klientsideverktøy. Det analyserer et skript, planlegger arbeidet og sender inn jobber, men det tilbyr ikke lagring eller en egen klynge, så det må først finnes en fungerende Hadoop-installasjon. Kravlisten for Apache er kort.

Komponent Krav Hvorfor det er nødvendig
Hadoop Hadoop 2.x eller 3.x, med HADOOP_HOME eksportert Leverer HDFS og utførelsesmotoren. Uten HADOOP_HOME faller Pig 0.18.0 tilbake til en innebygd Hadoop 2.7.3.
Java Java 1.7 eller nyere, med JAVA_HOME satt til installasjonsroten Pig og Hadoop-daemonene er Java programmer
Python (om du har) Python 2.7 Kun nødvendig for strømming Python brukerdefinerte funksjoner
Maur (valgfritt) Maur 1.8 Bare nødvendig når du bygger eller rekompilerer Pig fra kildekode

To praktiske punkter står ved siden av den listen. For det første, kjør alt som en Linux-bruker som allerede har en hjemmekatalog i HDFS og tillatelse til å skrive til den; denne veiledningen bruker hduser, kontoen som ble opprettet under oppsettet av Hadoop. For det andre, start klyngen før du starter Pig i MapReduce-modus, fordi Pig feiler umiddelbart hvis NameNode og ResourceManager er nede. Hvis Hadoop ikke er installert ennå, jobb deg gjennom hvordan installere Hadoop først.

Hvordan laste ned og installere Pig

Nå i denne Apache Pig-opplæringen lærer vi hvordan du laster ned og installerer Pig:

Før vi starter med selve prosessen, sørg for at du har Hadoop installert. Endre brukeren til 'hduser' (ID-en som ble brukt under konfigurasjonen av Hadoop; du kan bytte til bruker-ID-en som ble brukt under din egen Hadoop-konfigurasjon).

Terminalkommandoen bytter Linux-bruker til hduser før Pig-installasjonen starter

Trinn 1) Last ned den nyeste stabile versjonen av Pig Hadoop fra et av speilnettstedene som er tilgjengelige på

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

Velg tar.gz-filen (og ikke src.tar.gz) som skal lastes ned, som vist nedenfor.

Apache Pig lanserer nedlastingssiden med tar.gz-distribusjonen for å velge

Trinn 2) Når nedlastingen er fullført, naviger til mappen som inneholder den nedlastede tar-filen og flytt tar-filen til stedet der du vil sette opp Pig Hadoop. I dette tilfellet flytter vi til /usr/local.

Terminalen flytter den nedlastede Pig tar-filen til /usr/local-katalogen

Gå til mappen som skal inneholde Pig Hadoop-filene.

cd /usr/local

Extracinnholdet i tar-filen som vist nedenfor.

sudo tar -xvf pig-0.12.1.tar.gz

Terminal extracLagre Pig-arkivet med kommandoen sudo tar -xvf

Trinn 3) Endre ~/.bashrc for å legge til Pig-relaterte miljøvariabler.

Åpne ~/.bashrc-filen i et hvilket som helst tekstredigeringsprogram du ønsker, og gjør endringene nedenfor.

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

Tekstredigerer som viser eksportlinjene PIG_HOME og PATH lagt til i bashrc-filen

Trinn 4) Nå, bruk kommandoen nedenfor til å opprette kildekode for denne miljøkonfigurasjonen.

. ~/.bashrc

Terminal sourcing for bashrc-filen slik at de nye Pig-miljøvariablene trer i kraft

Trinn 5) Vi må kompilere Pig på nytt for å støtte Hadoop 2.2.0.

Her er trinnene for å gjøre dette.

Gå til Pigs hjemmekatalog.

cd $PIG_HOME

Installer Ant.

sudo apt-get install ant

Terminalinstallasjon av Apache Ant med apt-get som forberedelse til rekompilering av Pig

Merk: Nedlastingen starter og vil bruke tid avhengig av internetthastigheten din.

Kompiler Pig på nytt.

sudo ant clean jar-all -Dhadoopversion=23

Terminal som kjører Ant-målet som rekompilerer Pig for Hadoop 2-linjen

Vær oppmerksom på at flere komponenter lastes ned i denne rekompileringsprosessen, så systemet bør være koblet til internett.

Hvis denne prosessen også setter seg fast et sted og du ikke ser noen bevegelse på ledeteksten i mer enn 20 minutter, trykker du Ctrl + c og kjører den samme kommandoen på nytt.

I vårt tilfelle tar det 20 minutter.

Terminalutdata fra Pig-rekompileringen, som tok omtrent tjue minutter i dette eksemplet

Dette rekompileringstrinnet tilhører 0.12.1-æraen, da de leverte JAR-filene ble bygget mot Hadoop 1 og -Dhadoopversion=23 flag byttet Ant-bygget til Hadoop 0.23 og 2.x-linjen. Apache Pig 0.18.0 sender binærfiler som allerede kjører på Hadoop 2.7 og nyere, samt Hadoop 3, så på en nåværende utgivelse kan du vanligvis pakke ut tarballen og hoppe rett til testen nedenfor.

Trinn 6) Test Pig-installasjonen ved hjelp av kommandoen

pig -help

Utdata fra pig -help-kommandoen som viser Pig-kommandolinjealternativene etter installasjon

Eksempel Pig Script

Med Pig installert, kjører resten av denne Apache Pig-opplæringen et komplett skript. Vi bruker Pig Scripts for å finne antall produkter som selges i hvert land.

Input: Inndatasettet vårt er en CSV-fil, SalgJan2009.csv.

Trinn 1) Start Hadoop.

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

Trinn 2) Pig in Big Data tar en fil fra HDFS i MapReduce-modus og lagrer resultatene tilbake til HDFS.

Kopier filen SalesJan2009.csv (lagret på det lokale filsystemet på ~/input/SalesJan2009.csv) til HDFS-hjemmekatalogen (Hadoop Distributed File System).

Her i dette Apache Pig-eksemplet er filen i mappeinndataen. Hvis filen er lagret et annet sted, oppgi det navnet i stedet.

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

Terminalkopiering av SalesJan2009.csv fra det lokale filsystemet til HDFS

Sjekk om filen faktisk ble kopiert eller ikke.

$HADOOP_HOME/bin/hdfs dfs -ls /

HDFS-rotliste som bekrefter at SalesJan2009.csv-filen ble kopiert

Trinn 3) Griskonfigurasjon.

Først navigerer du til $PIG_HOME/conf og beholder en kopi av den opprinnelige egenskapsfilen.

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

Terminalen sikkerhetskopierer pig.properties før Pig-konfigurasjonen redigeres

Åpne pig.properties med en teksteditor du velger, og angi stien til loggfilen ved hjelp av pig.logfile.

sudo gedit pig.properties

Konfigurasjonsfilen pig.properties åpnes i en teksteditor med loggfilinnstillingen

Loggeren vil bruke denne filen til å logge feil.

Trinn 4) Kjør kommandoen «pig», som vil starte Pig-ledeteksten, et interaktivt skall for Pig-spørringer.

pig

Grunt interaktivt skall starter etter at pig-kommandoen er kjørt

Trinn 5) I Grunt-kommandoprompten for Pig, utfør Pig-kommandoene nedenfor i rekkefølge.

— A. Last inn filen som inneholder 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);

Trykk Enter etter denne kommandoen.

Grunt-shell aksepterer LOAD-setningen som leser salgs-CSV-filen inn i en relasjon

— B. Grupper data etter feltet Land.

GroupByCountry = GROUP salesTable BY Country;

Grunt-shell aksepterer GROUP-setningen som grupperer salgsrelasjonen etter land

— C. For hver tuppel i 'GroupByCountry', generer den resulterende strengen på formen Navn på land: Antall solgte produkter.

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

Trykk Enter etter denne kommandoen.

Grunt-shellet aksepterer FOREACH GENERATE-setningen som bygger lands- og antallsstrengen

— D. Lagre resultatene av dataflyten i katalogen «pig_output_sales» på HDFS.

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

Grunt-shellet aksepterer STORE-setningen som skriver utdata til pig_output_sales-katalogen

Denne kommandoen vil ta litt tid å utføre. Når den er ferdig, skal du se følgende skjermbilde.

Konsollskjermen vises når STORE-kommandoen er ferdig utført

Trinn 6) Resultatet kan sees gjennom kommandogrensesnittet som

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

Kommandolinjeutdata fra resultatfilen som viser produkter solgt per land

Resultatene kan også sees via et webgrensesnitt.

Åpne http://localhost:50070/ i en nettleser.

Port 50070 er NameNode-nettgrensesnittet på Hadoop 2. Hadoop 3 flyttet den samme siden til port 9870, så bruk den adressen i stedet hvis klyngen din kjører Hadoop 3.

Hadoop NameNode-nettgrensesnittet som brukes til å bla gjennom HDFS-filsystemet

Velg nå «Bla gjennom filsystemet» og naviger opp til /user/hduser/pig_output_sales.

HDFS-nettleseren som viser pig_output_sales-katalogen under hduser-hjemmebanen

Åpne part-r-00000 for å lese land- og produktantall-parene som skriptet produserte.

Nettleservisning av part-r-00000-utdatafilen med land- og produktantallpar

Apache Pig vs. Hive vs. MapReduce

Gris blir sjelden vurdert alene. Det vanlige spørsmålet er om en jobb hører hjemme i Gris, i Hive eller i et håndskrevet MapReduce-program, siden alle tre ender opp som jobber på samme klynge.

Aspekt KartReduser (Java) Apache gris Apache Hive
Interface Java API Pig Latin , et skriptspråk for dataflyt HiveQL, en SQL-dialekt
Nivå av magemusklertracsjon Lav Medium Høyt
Typisk bruker Java utvikler Dataingeniør eller forsker Analytiker komfortabel med SQL
Data det passer Alt, håndtert manuelt Strukturert og semistrukturert; skjemaet er valgfritt ved lastetid Strukturerte tabeller registrert i en metastore
Code volum De fleste linjer Færre linjer Færrest linjer for en spørring
Kjører som En MapReduce-jobb Kompilerer til MapReduce, Tez eller Spark jobber Kompilerer til MapReduce, Tez eller Spark jobber
Best på Full kontroll og tilpasset logikk Flertrinns ETL-pipelines Ad hoc-spørringer og rapportering

I praksis er delingen enkel. Bruk Hive når dataene allerede ser ut som en tabell og spørsmålet ser ut som SQL. Bruk Pig når inputen er rotete, når pipelinen er en kjede av transformasjoner i stedet for en enkelt spørring, eller når det samme skriptet må forgrene seg og kobles sammen på nytt. Bruk MapReduce bare når ingen av abs ser ut.tracsjon kan uttrykke logikken, fordi linjeantall vokser raskt.

Grisen sitter også komfortabelt ved siden av resten av økosystemet. Sqoop og Flume land rådataene, Pig eller Hive former dem, og en planlegger som Apache Oozie kjeder trinnene sammen til en repeterbar rørledning. For et bredere bilde av hvor disse verktøyene passer inn, se veiledningen til store data og oppsummeringen av big data-verktøy; for et kommersielt ETL-alternativ til håndskrevne skript, se Talent.

Spørsmål og svar

Ja. Apache Pig 0.18.0 ble utgitt 15. september 2025 og ga støtte for Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 og Python 3. Utviklingen går saktere enn i Yahoo!-årene, men prosjektet er ikke pensjonert.

AI-assistenter utarbeider transformasjonslogikk fra en enkel beskrivelse, foreslår sammenføyningsnøkler, flagger skjemaavvik mellom kjøringer og oppsummerer klyngelogger til en sannsynlig årsak. Behandle resultatet som et førsteutkast som fortsatt trenger profilering mot reelle data.

Copilot produserer raskt plausibel Pig Latin fordi syntaksen er godt representert i offentlige databaser. Den finner opp funksjonsnavn og avviker fra feltposisjoner, så kjør DESCRIBE og ILLUSTRATE på et eksempel før du stoler på et generert skript.

Pig kjøres bare når en setning fremtvinger materialisering. En kjede av LOAD- og FOREACH-setninger valideres, men kjøres aldri før en DUMP eller STORE følger, så et skript som slutter etter en transformasjon fullføres stille.

DUMP skriver ut en relasjon til terminalen og er ment for testing. STORE skriver relasjonen til filsystemet gjennom en lagringsfunksjon som PigStorage. Produksjonsskript skal alltid slutte med STORE.

Nei. AS-klausulen er valgfri. Uten den lastes alle felt inn som en bytearray og refereres til etter posisjon, for eksempel $0 og $1. Å deklarere et skjema gjør ganske enkelt skript lesbare og lar Pig typesjekke tidligere.

De fleste nye rørledninger starter på Spark, som har et større fellesskap og rikere biblioteker. Pig forblir fornuftig der skript allerede finnes, der teamet foretrekker en dataflytsyntaks, eller der Pig kjører på Spark gjennom gnist-eksektypen.

Sqoop importerer relasjonstabeller, og Flume streamer loggdata til HDFS. Pig transformerer deretter det som har landet. Oozie kjeder import-, transformasjons- og eksporttrinnene sammen til én planlagt arbeidsflyt, slik at pipelinen gjentas uten manuelle kjøringer.

Oppsummer dette innlegget med: