Tutorial su Hadoop Pig: cos'รจ Apache Pig? Architecnica, esempio

โšก Riepilogo intelligente

Apache Pig รจ una piattaforma di alto livello per l'analisi di grandi set di dati su Hadoop, che combina il linguaggio di flusso di dati Pig Latin con un runtime che compila ogni script in MapReduce, Tez o Spark lavori automaticamente.

  • ๐Ÿ”˜ Due componenti: Pig Latin fornisce il linguaggio e il runtime di Pig trasforma ogni script in job del cluster.
  • โ˜‘๏ธ Tipi di esecuzione: Le versioni attuali offrono sei tipi di eseguibili selezionati con il flag -x, da locale a Spark.
  • โœ… Prerequisiti: Un'installazione Hadoop funzionante piรน Java, con HADOOP_HOME e JAVA_HOME esportati, deve prima esistere.
  • ๐Ÿงช Esempio pratico: Uno script composto da quattro istruzioni carica il file SalesJan2009.csv, lo raggruppa per paese e memorizza i conteggi dei prodotti.
  • ๏ธ Modello di dati: I tipi scalari, insieme a tuple, bag e map, consentono a Pig di leggere file annidati e con struttura debole.
  • ๐Ÿ“ˆ Versione corrente: Apache Pig 0.18.0 รจ arrivato a settembre 2025 con Hadoop 3, Tez, Spark and Python 3 supporto.

Tutorial su Hadoop Pig che illustra l'architettura e l'installazione di Apache Pig, con un esempio pratico in Pig Latin.

Questo tutorial inizia con l'idea alla base di Apache Pig, per poi illustrare l'installazione e l'esecuzione completa di uno script Pig Latin.

Cos'รจ Apache Pig?

Il maiale รจ un animale di alto livello linguaggio di programmazione Utile per analizzare grandi insiemi di dati. Pig รจ nato da un progetto di sviluppo di Yahoo!

In un framework MapReduce, i programmi devono essere tradotti in una serie di fasi Map e Reduce. Tuttavia, questo non รจ un modello di programmazione con cui gli analisti di dati hanno familiaritร . Quindi, per colmare questa lacuna, un assolutotraczione chiamata Pig รจ stata costruita sopra Hadoop.

Apache Pig permette di concentrarsi maggiormente sull'analisi di grandi quantitร  di dati e di dedicare meno tempo alla scrittura di programmi MapReduce. Proprio come i maiali, che mangiano di tutto, il linguaggio di programmazione Apache Pig รจ progettato per funzionare con qualsiasi tipo di dato. Ecco perchรฉ il nome, Pig! La mascotte del progetto qui sotto illustra perfettamente il concetto.

Un maiale dei cartoni animati, utilizzato come mascotte di Apache Pig, illustra che Pig elabora qualsiasi tipo di dato.

Il progetto รจ ancora attivo. Apache Pig 0.18.0 รจ stato rilasciato il 15 settembre 2025 e aggiunge il supporto per Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 e Python 3, secondo il Pagina delle release di Apache PigLa procedura descritta di seguito รจ stata originariamente scritta per la versione 0.12.1, molto piรน vecchia, quindi alcuni passaggi includono una nota in cui si afferma che la versione attuale si comporta in modo diverso.

Maiale Architectura

L'architettura di Pig รจ composta da due componenti:

  1. Maiale latino, che รจ una lingua
  2. Un ambiente di esecuzione, per l'esecuzione di programmi in Pig Latin.

Un programma Pig Latin รจ costituito da una serie di operazioni o trasformazioni che vengono applicate ai dati di input per produrre output. Queste operazioni descrivono un flusso di dati che viene tradotto in una rappresentazione eseguibile dall'ambiente di esecuzione Hadoop Pig. In sostanza, i risultati di queste trasformazioni sono una serie di MapReduce processi di cui un programmatore non รจ a conoscenza. Quindi, in un certo senso, Pig in Hadoop permette al programmatore di concentrarsi sui dati piuttosto che sulla natura dell'esecuzione.

Il Pig Latin รจ un linguaggio relativamente rigido che utilizza parole chiave familiari dell'elaborazione dati, ad esempio Join, Group e Filter. Il diagramma seguente tracSi tratta di uno script proveniente dalla shell di Grunt che, attraverso il parser, l'ottimizzatore e il compilatore, viene elaborato prima di raggiungere il motore di esecuzione.

Diagramma dell'architettura di Apache Pig che mostra il passaggio degli script Pig Latin attraverso il parser, l'ottimizzatore e il compilatore fino al motore di esecuzione.

Modalitร  di esecuzione

Pig in Hadoop ha due modalitร  di esecuzione e la procedura di installazione descritta piรน avanti le utilizza entrambe:

  1. Modalitร  locale: In questa modalitร , il linguaggio Hadoop Pig viene eseguito in un singolo JVM e utilizza il file system locale. Questa modalitร  รจ adatta solo per l'analisi di piccoli set di dati utilizzando Pig in Hadoop.
  2. Modalitร  MapReduce: In questa modalitร , le query scritte in Pig Latin vengono tradotte in job MapReduce ed eseguite su un cluster Hadoop (il cluster puรฒ essere pseudo-distribuito o completamente distribuito). La modalitร  MapReduce con un cluster completamente distribuito รจ utile per eseguire Pig su grandi insiemi di dati.

Quei due sono la coppia classica. Le versioni attuali espongono effettivamente sei tipi di esecuzione, o exectype, ciascuno selezionato con lo stesso -x bandiera, come documentato nel Guida introduttiva a Pig 0.18.0.

Esettico Comando Dove il lavoro va
Local maiale -x locale Una singola JVM rispetto al file system locale
Tez locale maiale -x tez_local Una singola JVM che utilizza il runtime Tez (sperimentale)
Spark locale maiale -x spark_local Una singola JVM che utilizza la Spark tempo di esecuzione (sperimentale)
MapReduce pig o pig -x mapreduce Un cluster Hadoop con HDFS; questa รจ l'impostazione predefinita
Tez maiale -x tez Un cluster Hadoop che esegue il motore Tez
Spark maiale -x scintilla A SparkCluster YARN o Mesos con HDFS

Tipi di dati Pig Latin e OperaTors

Prima di scrivere uno script, รจ utile sapere cosa Pig puรฒ contenere e cosa puรฒ fargli. Il modello dati รจ completamente annidato, il che permette a Pig di leggere file di log e altri input con struttura debole che una tabella relazionale rifiuterebbe.

Il Pig Latin offre due famiglie di tipi:

  • Tipi scalari: int, long, float, double, chararray, bytearray, boolean, datetime, biginteger and bigdecimal. Lo script di esempio in seguito dichiara ogni colonna come chararray.
  • Tipi complessi: a tupla รจ un insieme ordinato di campi e si comporta come una riga; Bags รจ una collezione non ordinata di tuple e si comporta come una tabella; carta geografica รจ un insieme di coppie chiave-valore la cui chiave deve essere una chararray.

Gli operatori rientrano in un numero ristretto di settori, e una manciata di loro gestisce quasi tutte le condutture:

Operator Ciรฒ che fa
CARICA / MEMORIZZA Leggere una relazione dal file system e riscrivere il risultato
FILTRO Mantieni solo le tuple che corrispondono a una condizione
PER OGNI โ€ฆ GENERARE Procedi colonna per colonna, creando nuovi campi
GRUPPO / COGRUPPO Raggruppa una relazione, o due o piรน relazioni, tramite una chiave
ISCRIVITI Unire le relazioni con un join interno o esterno
UNIONE / DIVISIONE Unire le relazioni o dividerne una in diverse
ORDINA PER / DISTINTO / LIMITA Ordina, elimina i duplicati e limita il numero di tuple
SCARICA / DESCRIVI / SPIEGA / ILLUSTRA Esaminare i risultati, gli schemi, i piani di esecuzione e le esecuzioni di esempio.

Anche i quattro operatori di ispezione hanno scorciatoie Grunt, che consentono di risparmiare tempo.ping durante il debug: \d per DUMP, \de per DESCRIVERE, \e per SPIEGARE e \i per ILLUSTRARE.

Prerequisiti

Pig รจ uno strumento lato client. Analizza uno script, pianifica il lavoro e invia i job, ma non fornisce spazio di archiviazione o un cluster proprio, quindi รจ necessario disporre prima di un'installazione Hadoop funzionante. L'elenco dei requisiti di Apache รจ breve.

Componente Requisito Perchรฉ รจ necessario
Hadoop Hadoop 2.x o 3.x, con HADOOP_HOME esportato Fornisce HDFS e il motore di esecuzione. Senza HADOOP_HOME, Pig 0.18.0 utilizza Hadoop 2.7.3 integrato.
Java Java 1.7 o versioni successive, con JAVA_HOME impostato sulla directory di installazione Pig e i daemon Hadoop sono Java programmi
Python (facoltativo) Python 2.7 Necessario solo per lo streaming Python funzioni definite dall'utente
Formica (facoltativa) Formica 1.8 Necessario solo durante la compilazione o la ricompilazione di Pig dai sorgenti.

Due punti pratici accompagnano quell'elenco. In primo luogo, esegui tutto come un utente Linux che ha giร  una directory home in HDFS e il permesso di scriverci; questo tutorial utilizza hduser, l'account creato durante la configurazione di Hadoop. In secondo luogo, avviare il cluster prima di avviare Pig in modalitร  MapReduce, perchรฉ Pig fallisce immediatamente se NameNode e ResourceManager sono inattivi. Se Hadoop non รจ ancora installato, procedere tramite come installare Hadoop prima.

Come scaricare e installare Pig

Ora in questo tutorial di Apache Pig impareremo come scaricare e installare Pig:

Prima di iniziare con la procedura vera e propria, assicurati di aver installato Hadoop. Cambia utente in 'hduser' (l'ID utilizzato durante la configurazione di Hadoop; puoi passare all'ID utente che usi per la tua configurazione di Hadoop).

Comando da terminale che cambia l'utente Linux in hduser prima dell'avvio dell'installazione di Pig.

Passo 1) Scarica l'ultima versione stabile di Pig Hadoop da uno qualsiasi dei siti mirror disponibili all'indirizzo

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

Seleziona il file tar.gz (e non src.tar.gz) da scaricare, come mostrato di seguito.

Apache Pig rilascia la pagina di download con la distribuzione tar.gz da selezionare

Passo 2) Una volta completato il download, accedi alla directory contenente il file tar scaricato e sposta il file tar nella posizione in cui desideri installare Pig Hadoop. In questo caso, lo sposteremo in /usr/local.

Il terminale sposta il file tar di Pig scaricato nella directory /usr/local

Spostati nella directory che conterrร  i file di Pig Hadoop.

cd /usr/local

Extracil contenuto del file tar come di seguito.

sudo tar -xvf pig-0.12.1.tar.gz

Terminal extracestraendo l'archivio Pig con il comando sudo tar -xvf

Passo 3) Modifica il file ~/.bashrc per aggiungere le variabili d'ambiente relative a Pig.

Apri il file ~/.bashrc con un qualsiasi editor di testo a tua scelta e apporta le modifiche indicate di seguito.

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

Editor di testo che mostra le righe di esportazione PIG_HOME e PATH aggiunte al file bashrc

Passo 4) Ora, esegui il caricamento di questa configurazione d'ambiente utilizzando il comando seguente.

. ~/.bashrc

Eseguire il comando `terminal sourcing` sul file bashrc in modo che le nuove variabili d'ambiente di Pig abbiano effetto.

Passo 5) Dobbiamo ricompilare Pig per supportare Hadoop 2.2.0.

Ecco i passaggi da seguire.

Vai alla directory principale di Pig.

cd $PIG_HOME

Installa Ant.

sudo apt-get install ant

Terminale che installa Apache Ant con apt-get in preparazione alla ricompilazione di Pig

Nota: il download si avvierร  e richiederร  tempo in base alla velocitร  della tua connessione internet.

Ricompila Pig.

sudo ant clean jar-all -Dhadoopversion=23

Terminale che esegue il target Ant che ricompila Pig per la linea Hadoop 2

Si prega di notare che durante questo processo di ricompilazione vengono scaricati diversi componenti, pertanto il sistema deve essere connesso a Internet.

Inoltre, se questo processo si blocca e non vedi alcun movimento nel prompt dei comandi per piรน di 20 minuti, premi Ctrl + c ed esegui nuovamente lo stesso comando.

Nel nostro caso, ci vogliono 20 minuti.

Output del terminale dalla ricompilazione di Pig, che in questo esempio ha richiesto circa venti minuti.

Questo passaggio di ricompilazione appartiene all'era 0.12.1, quando i jar spediti venivano creati contro Hadoop 1 e il -Dhadoopversion=23 Il flag ha cambiato la build Ant per la linea Hadoop 0.23 e 2.x. Apache Pig 0.18.0 include binari che funzionano giร  su Hadoop 2.7 e versioni successive, nonchรฉ su Hadoop 3, quindi in una versione corrente รจ normalmente possibile estrarre il file tarball e passare direttamente al test seguente.

Passo 6) Verifica l'installazione di Pig utilizzando il comando

pig -help

Output del comando pig -help che elenca le opzioni della riga di comando di Pig dopo l'installazione.

Esempio di sceneggiatura di maiale

Una volta installato Pig, il resto di questo tutorial su Apache Pig esegue uno script completo. Useremo Pig Scripts per trovare il numero di prodotti venduti in ciascun paese.

Input: Il nostro set di dati di input รจ un file CSV, VenditeJan2009.csv.

Passo 1) Avvia Hadoop.

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

Passo 2) Pig in Big Data preleva un file da HDFS in modalitร  MapReduce e memorizza i risultati nuovamente in HDFS.

Copia il file SalesJan2009.csv (memorizzato sul file system locale in ~/input/SalesJan2009.csv) nella directory home di HDFS (Hadoop Distributed File System).

In questo esempio di Apache Pig, il file si trova nella cartella `input`. Se il file รจ memorizzato in un'altra posizione, specifica quel nome.

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

Il terminale copia il file SalesJan2009.csv dal file system locale a HDFS.

Verifica se il file รจ stato effettivamente copiato.

$HADOOP_HOME/bin/hdfs dfs -ls /

Elenco della directory radice HDFS che conferma l'avvenuta copia del file SalesJan2009.csv.

Passo 3) Configurazione Pig.

Innanzitutto, accedi alla directory $PIG_HOME/conf e conserva una copia del file di proprietร  originale.

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

Backup del terminale di pig.properties prima della modifica della configurazione di Pig

Apri il file pig.properties con un editor di testo a tua scelta e specifica il percorso del file di log utilizzando pig.logfile.

sudo gedit pig.properties

Il file di configurazione pig.properties si apre in un editor di testo nelle impostazioni del file di log

Il sistema di registrazione utilizzerร  questo file per registrare gli errori.

Passo 4) Esegui il comando 'pig', che avvierร  il prompt dei comandi di Pig, una shell interattiva per le query Pig.

pig

Avvio della shell interattiva di Grunt dopo l'esecuzione del comando pig

Passo 5) Nel prompt dei comandi di Grunt per Pig, eseguire i seguenti comandi Pig in ordine.

โ€” A. Caricare il file contenente i dati.

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

Premi Invio dopo questo comando.

Shell Grunt che accetta l'istruzione LOAD che legge il file CSV delle vendite in una relazione

โ€” B. Raggruppa i dati in base al campo Paese.

GroupByCountry = GROUP salesTable BY Country;

Grunt shell accetta la dichiarazione GROUP che raggruppa le relazioni di vendita per paese

โ€” C. Per ogni tupla in 'GroupByCountry', genera la stringa risultante del tipo Nome del Paese: Numero di prodotti venduti.

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

Premi Invio dopo questo comando.

Shell Grunt che accetta l'istruzione FOREACH GENERATE che costruisce la stringa del paese e del conteggio

โ€” D. Memorizza i risultati del flusso di dati nella directory 'pig_output_sales' su HDFS.

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

Shell Grunt che accetta l'istruzione STORE che scrive l'output nella directory pig_output_sales

L'esecuzione di questo comando richiederร  del tempo. Una volta completata, dovresti visualizzare la seguente schermata.

Schermata della console visualizzata al termine dell'esecuzione del comando STORE

Passo 6) Il risultato puรฒ essere visualizzato tramite l'interfaccia di comando come

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

Output da riga di comando del file di risultati che elenca i prodotti venduti per paese

I risultati possono essere visualizzati anche tramite un'interfaccia web.

Apri http://localhost:50070/ in un browser web.

La porta 50070 รจ l'interfaccia web del NameNode su Hadoop 2. Hadoop 3 ha spostato la stessa pagina sulla porta 9870, quindi usa quest'ultimo indirizzo se il tuo cluster utilizza Hadoop 3.

Interfaccia web Hadoop NameNode utilizzata per esplorare il file system HDFS

Ora seleziona "Esplora il filesystem" e naviga fino a /user/hduser/pig_output_sales.

Il browser HDFS mostra la directory pig_output_sales nel percorso home dell'utente hduser.

Apri la parte r-00000 per leggere le coppie paese e quantitร  di prodotto generate dallo script.

Visualizzazione nel browser del file di output part-r-00000 con coppie di paesi e conteggi di prodotti

Apache Pig vs Hive vs MapReduce

Pig viene raramente valutato da solo. La domanda usuale รจ se un lavoro appartiene a Pig, in Alveare oppure in un programma MapReduce scritto manualmente, dato che tutti e tre finiscono per essere eseguiti come job sullo stesso cluster.

Aspetto MapReduce (Java) Maiale Apache Alveare di Apache
Interfaccia Java API Pig Latin, un linguaggio di scripting per il flusso di dati HiveQL, un dialetto SQL
Livello di addominalitracproduzione Basso Medio Alto
Utente tipico Java sviluppatore Ingegnere o ricercatore dei dati Analista con dimestichezza con SQL
Dati adatti Qualsiasi cosa, gestita manualmente Strutturato e semi-strutturato; lo schema รจ opzionale al momento del caricamento. Tabelle strutturate registrate in un metastore
Code volume La maggior parte delle linee Meno linee Il minor numero di righe per una query
Esegue come Un job MapReduce Compila in MapReduce, Tez o Spark posti di lavoro Compila in MapReduce, Tez o Spark posti di lavoro
benvenuti alle Controllo completo e logica personalizzata Pipeline ETL a piรน fasi Interrogazioni e reportistica ad hoc

In pratica la distinzione รจ semplice. Scegli Hive quando i dati hanno giร  la forma di una tabella e la domanda รจ formulata come SQL. Scegli Pig quando l'input รจ disordinato, quando la pipeline รจ una catena di trasformazioni piuttosto che una singola query, o quando lo stesso script deve diramarsi e ricongiungersi. Scegli MapReduce solo quando nessuno dei due approcci รจ adatto.tracLa funzione puรฒ esprimere la logica, perchรฉ il numero di righe cresce rapidamente.

Il maiale si integra perfettamente nell'ecosistema. Sqoop e Flume atterra i dati grezzi, Pig o Hive li modellano e uno scheduler come Apache Oozie incatena i passaggi in una pipeline ripetibile. Per un quadro piรน ampio di dove si inseriscono questi strumenti, consultare la guida a Big Data e la raccolta di strumenti per big data; per un'alternativa commerciale ETL agli script scritti a mano, vedere Talend.

DOMANDE FREQUENTI

Sรฌ. Apache Pig 0.18.0 รจ stato rilasciato il 15 settembre 2025 e ha introdotto il supporto per Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 e Python 3. Lo sviluppo รจ piรน lento rispetto agli anni in cui era gestito da Yahoo!, ma il progetto non รจ stato abbandonato.

Gli assistenti IA elaborano la logica di trasformazione a partire da una semplice descrizione, suggeriscono le chiavi di join, segnalano le discrepanze di schema tra le esecuzioni e riassumono i log del cluster in una probabile causa. Considera l'output come una prima bozza che necessita ancora di essere confrontata con dati reali.

Copilot genera rapidamente codice Pig Latin plausibile perchรฉ la sintassi รจ ben rappresentata nei repository pubblici. Tuttavia, inventa nomi di funzioni e non corrisponde alle posizioni dei campi, quindi รจ consigliabile eseguire DESCRIBE e ILLUSTRATE su un esempio prima di fidarsi di uno script generato.

Pig viene eseguito solo quando un'istruzione impone la materializzazione. Una catena di istruzioni LOAD e FOREACH viene convalidata ma non viene mai eseguita finchรฉ non segue un DUMP o uno STORE, quindi uno script che termina dopo una trasformazione termina silenziosamente.

DUMP stampa una relazione sul terminale ed รจ pensato per i test. STORE scrive la relazione nel file system tramite una funzione di archiviazione come PigStorage. Gli script di produzione dovrebbero sempre terminare con STORE.

No. La clausola AS รจ facoltativa. Senza di essa, ogni campo viene caricato come array di byte e referenziato per posizione, ad esempio $0 e $1. Dichiarare uno schema rende semplicemente gli script piรน leggibili e permette a Pig di effettuare il controllo dei tipi in anticipo.

La maggior parte dei nuovi oleodotti inizia su Spark, che ha una comunitร  piรน ampia e librerie piรน ricche. Pig rimane sensato dove esistono giร  script, dove il team preferisce una sintassi di flusso di dati o dove Pig viene eseguito su Spark attraverso l'esecutivo di Spark.

Sqoop importa tabelle relazionali e Flume trasferisce i dati di log in HDFS. Pig trasforma quindi i dati ricevuti. Oozie concatena le fasi di importazione, trasformazione ed esportazione in un unico flusso di lavoro pianificato, in modo che la pipeline si ripeta senza necessitร  di interventi manuali.

Riassumi questo post con: