Hadoop Pig -opastus: Mikä on Apache Pig? Architecture, esimerkki
⚡ Älykäs yhteenveto
Apache Pig on korkean tason alusta suurten tietojoukkojen analysointiin Hadoopissa. Se yhdistää Pig Latin -tiedonkulkukielen ajonaikaiseen ympäristöön, joka kääntää jokaisen komentosarjan MapReduce-, Tez- tai muuhun muotoon. Spark työt automaattisesti.

Tämä tutoriaali alkaa Apache Pigin taustalla olevalla idealla, käy sitten läpi sen asennuksen ja täydellisen Pig-latinalaisen aakkoston suorittamisen alusta loppuun.
Mikä on Apache Pig?
Sika on korkean tason ohjelmointikieli hyödyllinen suurten tietojoukkojen analysointiin. Pig oli Yahoo!:n kehitystyön tulos.
MapReduce-kehyksessä ohjelmat on käännettävä sarjaksi Map- ja Reduce-vaiheita. Tämä ei kuitenkaan ole ohjelmointimalli, jonka data-analyytikot tuntevat. Joten tämän kuilun kaventamiseksi abstracPig-niminen rakennus rakennettiin Hadoop.
Apache Pig antaa ihmisille mahdollisuuden keskittyä enemmän massadatajoukkojen analysointiin ja käyttää vähemmän aikaa MapReduce-ohjelmien kirjoittamiseen. Samoin kuin siat, jotka syövät mitä tahansa, Apache Pig -ohjelmointikieli on suunniteltu käsittelemään kaikenlaista dataa. Siksi nimi Pig! Alla oleva projektin maskotti tekee saman asian.
Projekti on edelleen aktiivinen. Apache Pig 0.18.0 julkaistiin 15. syyskuuta 2025 ja lisää tuen Hadoop 3:lle, Tez 0.10:lle, Hive 3:lle, Spark 3, HBase 2 ja Python Vuonna 3, mukaan Apache Pig -julkaisusivuAlla oleva läpikäynti kirjoitettiin alun perin paljon vanhempaa 0.12.1-riviä vasten, joten muutamissa vaiheissa on huomautus, jos nykyinen versio toimii eri tavalla.
Sika Archirakenne
Pigin arkkitehtuuri koostuu kahdesta osasta:
- sika latina, joka on kieli
- Ajonaikainen ympäristö, Pig Latin -ohjelmien suorittamiseen.
Pig Latin -ohjelma koostuu sarjasta operaatioita tai muunnoksia, joita sovelletaan syöttötietoihin tulosteen tuottamiseksi. Nämä operaatiot kuvaavat tietovuon, jonka Hadoop Pig -suoritusympäristö muuntaa suoritettavaksi tiedostoksi. Näiden muunnosten tulokset ovat sarja MapReduce työtehtäviä, joista ohjelmoija ei ole tietoinen. Joten tavallaan Pig Hadoopissa antaa ohjelmoijalle mahdollisuuden keskittyä dataan suorituksen luonteen sijaan.
Pig Latin on suhteellisen jäykkä kieli, joka käyttää tietojenkäsittelystä tuttuja avainsanoja, kuten Join, Group ja Filter. Alla oleva kaavio tracon skripti Grunt-komentotulkista jäsentimen, optimoijan ja kääntäjän kautta matkalla suoritusmoottoriin.
Suoritustilat
Hadoopissa Pig-ohjelmalla on kaksi suoritustilaa, ja asennusohjeessa käytetään molempia:
- Paikallinen tila: Tässä tilassa Hadoop Pig -kieli toimii yhdessä JVM ja käyttää paikallista tiedostojärjestelmää. Tämä tila sopii vain pienten tietojoukkojen analysointiin Pig in Hadoop -ohjelmalla.
- MapReduce-tila: Tässä tilassa Pig Latinilla kirjoitetut kyselyt muunnetaan MapReduce-töiksi ja suoritetaan Hadoop-klusterissa (klusteri voi olla pseudohajautettu tai täysin hajautettu). MapReduce-tila täysin hajautetulla klusterilla on hyödyllinen Pig-kyselyn suorittamiseen suurilla tietojoukoilla.
Nuo kaksi ovat klassinen pari. Nykyisissä julkaisuissa on itse asiassa kuusi suoritustyyppiä eli suoritustyyppiä, joista jokainen valitaan samalla -x lippu, kuten dokumentoitu Pig 0.18.0 Aloitusopas.
| Suoritustyyppi | Komento | Missä työ kulkee |
|---|---|---|
| paikallinen | sika -x paikallinen | Yksi JVM paikallista tiedostojärjestelmää vasten |
| Tez-paikallinen | pig -x tez_local | Yksi JVM käyttäen Tez-ajoympäristöä (kokeellinen) |
| Spark paikallinen | pig -x spark_local | Yksi JVM, joka käyttää Spark ajonaikainen (kokeellinen) |
| MapReduce | sika tai sika -x mapreduce | Hadoop-klusteri HDFS:llä; tämä on oletusarvo |
| tez | sika -x tez | Hadoop-klusteri, jossa on käynnissä Tez-moottori |
| Spark | sika -x kipinä | A Spark, YARN- tai Mesos-klusteri HDFS:llä |
Sian latinalaiset tietotyypit ja OperaTors
Ennen skriptin kirjoittamista on hyödyllistä tietää, mitä Pig voi tallentaa ja mitä se voi niille tehdä. Datamalli on täysin sisäkkäinen, minkä ansiosta Pig voi lukea lokitiedostoja ja muita löyhästi jäsenneltyjä syötteitä, jotka relaatiotaulukko hylkäisi.
Pig Latin tarjoaa kaksi tyyppiperhettä:
- Skalaarityypit:
int,long,float,double,chararray,bytearray,boolean,datetime,bigintegerjabigdecimalMyöhemmin esimerkkiskripti määrittää jokaisen sarakkeen muotoonchararray. - Monimutkaiset tyypit: a monikko on järjestetty joukko kenttiä ja käyttäytyy kuin rivi; a laukku on järjestämätön kokoelma tupleja ja käyttäytyy kuin taulukko; a kartta on joukko avain- ja arvopareja, joiden avaimen on oltava
chararray.
Operaattorit jakautuvat pieneen määrään töitä, ja kourallinen heistä hoitaa lähes jokaista putkistoa:
| OperaTor | Mitä se tekee |
|---|---|
| LATAA / SÄILYTÄ | Lue relaatio tiedostojärjestelmästä ja kirjoita tulos takaisin |
| SUODATIN | Säilytä vain ne tuplet, jotka vastaavat ehtoa |
| FOREACH … GENEROI | Työskentele sarake sarakkeelta, luo uusia kenttiä |
| RYHMÄ / YHTEISTYÖRYHMÄ | Ryhmittele yksi relaatio tai kaksi tai useampi relaatio avaimen avulla |
| LIITY | Yhdistä relaatiot sisäisellä tai ulkoisella liitoksella |
| LIITTO / JAKO | Yhdistä relaatiot yhteen tai jaa yksi useisiin osiin |
| TILAUKSEN PERUSTE / ERITTÄIN / RAJA | Lajittele, poista duplikaatit ja rajoita tuplejen määrää |
| DUMPAA / KUVAILEE / SELITTÄKÄÄ / KUVAILEVAT | Tarkista tulokset, skeemat, suoritussuunnitelmat ja esimerkkiajot |
Neljällä tarkastusoperaattorilla on myös Grunt-oikopolkuja, mikä säästää aikaa.ping virheenkorjauksen aikana: \d DUMP-tiedostoa varten \de KUVAUKSELLE \e SELITYKSEKSI ja \i ILLUSTRATE-ohjelmaa varten.
Edellytykset
Pig on asiakaspuolen työkalu. Se jäsentää skriptin, suunnittelee työn ja lähettää työt, mutta se ei tarjoa omaa tallennustilaa tai klusteria, joten ensin on oltava toimiva Hadoop-asennus. Apachen vaatimuslista on lyhyt.
| komponentti | Vaatimus | Miksi sitä tarvitaan |
|---|---|---|
| Hadoop | Hadoop 2.x tai 3.x, HADOOP_HOME vietyllä | Tarjoaa HDFS:n ja suoritusmoottorin. Ilman HADOOP_HOMEa Pig 0.18.0 palaa takaisin sulautettuun Hadoop 2.7.3:een. |
| Java | Java 1.7 tai uudempi, jossa JAVA_HOME on asetettu asennuksen juurihakemistoon | Pig ja Hadoop-daemonit ovat Java ohjelmat |
| Python (Valinnainen) | Python 2.7 | Tarvitaan vain suoratoistoon Python käyttäjän määrittämät funktiot |
| Muurahainen (valinnainen) | Muurahainen 1.8 | Tarvitaan vain, kun Pig-koodia rakennetaan tai käännetään uudelleen lähdekoodista |
Tuon listan rinnalla on kaksi käytännön vinkkiä. Ensinnäkin, aja kaikki Linux-käyttäjänä, jolla on jo kotihakemisto HDFS ja lupa kirjoittaa siihen; tässä opetusohjelmassa käytetään hduser, Hadoopin asennuksen aikana luotu tili. Toiseksi, käynnistä klusteri ennen Pig-ohjelman käynnistämistä MapReduce-tilassa, koska Pig kaatuu välittömästi, jos NameNode ja ResourceManager ovat alhaalla. Jos Hadoopia ei ole vielä asennettu, toimi seuraavasti: Kuinka asentaa Hadoop ensimmäinen.
Kuinka ladata ja asentaa Pig
Nyt tässä Apache Pig -opetusohjelmassa opimme lataamaan ja asentamaan Pig:n:
Ennen kuin aloitamme varsinaisen prosessin, varmista, että sinulla on Hadoop asennettuna. Vaihda käyttäjätunnukseksi 'hduser' (tunnus, jota käytettiin Hadoopin määrittämisessä; voit vaihtaa käyttäjätunnukseen, jota käytettiin omassa Hadoop-määrityksessäsi).
Vaihe 1) Lataa Pig Hadoopin vakaa uusin versio mistä tahansa peilisivustosta osoitteessa
https://pig.apache.org/releases.html
Valitse ladattava tar.gz-tiedosto (äläkä src.tar.gz-tiedostoa) alla olevan kuvan mukaisesti.
Vaihe 2) Kun lataus on valmis, siirry hakemistoon, joka sisältää ladatun tar-tiedoston, ja siirrä tar-tiedosto sijaintiin, johon haluat asentaa Pig Hadoopin. Tässä tapauksessa siirrämme tiedoston hakemistoon /usr/local.
Siirry hakemistoon, joka sisältää Pig Hadoop -tiedostot.
cd /usr/local
Extract tar-tiedoston sisältö alla olevan mukaisesti.
sudo tar -xvf pig-0.12.1.tar.gz
Vaihe 3) Muokkaa ~/.bashrc-tiedostoa lisätäksesi Pig-tiedostoihin liittyviä ympäristömuuttujia.
Avaa ~/.bashrc-tiedosto millä tahansa tekstieditorilla ja tee alla olevat muutokset.
export PIG_HOME=<Installation directory of Pig> export PATH=$PIG_HOME/bin:$HADOOP_HOME/bin:$PATH
Vaihe 4) Nyt lähdekoodin luo tämä ympäristön kokoonpano alla olevalla komennolla.
. ~/.bashrc
Vaihe 5) Meidän on käännettävä Pig uudelleen tukemaan Hadoop 2.2.0:aa.
Tässä ovat vaiheet tämän tekemiseksi.
Siirry Pigin kotihakemistoon.
cd $PIG_HOME
Asenna Ant.
sudo apt-get install ant
Huomautus: Lataus alkaa ja kestää internet-nopeutesi mukaan.
Käännä Pig uudelleen.
sudo ant clean jar-all -Dhadoopversion=23
Huomaa, että tässä uudelleenkääntämisprosessissa ladataan useita komponentteja, joten järjestelmän on oltava yhteydessä Internetiin.
Jos tämä prosessi jumiutuu jonnekin etkä näe komentokehotteessa mitään liikettä yli 20 minuuttiin, paina Ctrl + c ja suorita sama komento uudelleen.
Meidän tapauksessamme se kestää 20 minuuttia.
Tämä uudelleenkääntämisvaihe kuuluu 0.12.1-aikakauteen, jolloin toimitetut jar-tiedostot rakennettiin Hadoop 1:tä ja -Dhadoopversion=23 flag vaihtoi Ant-koontiversion Hadoop 0.23- ja 2.x-linjalle. Apache Pig 0.18.0 toimittaa binääritiedostot, jotka toimivat jo Hadoop 2.7:ssä ja uudemmissa sekä Hadoop 3:ssa, joten nykyisessä julkaisussa voit normaalisti purkaa tarball-tiedoston ja siirtyä suoraan alla olevaan testiin.
Vaihe 6) Testaa Pig-asennus komennolla
pig -help
Esimerkki Pig Script
Kun Pig on asennettu, tämän Apache Pig -opetusohjelman loppuosa suoritetaan kokonaisen skriptin avulla. Käytämme Pig Scriptsiä selvittääksemme kussakin maassa myytyjen tuotteiden määrän.
Syöte: Syötetietojoukkomme on CSV-tiedosto, MyyntiJan2009.csv.
Vaihe 1) Käynnistä Hadoop.
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Vaihe 2) Big Datassa oleva Pig ottaa tiedoston HDFS:stä MapReduce-tilassa ja tallentaa tulokset takaisin HDFS:ään.
Kopioi tiedosto SalesJan2009.csv (tallennettuna paikalliseen tiedostojärjestelmään osoitteeseen ~/input/SalesJan2009.csv) HDFS:n (Hadoop Distributed File System) kotihakemistoon.
Tässä Apache Pig -esimerkissä tiedosto on kansion syötekentässä. Jos tiedosto on tallennettu johonkin muualle, anna sen nimi.
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/input/SalesJan2009.csv /
Tarkista, onko tiedosto todella kopioitu vai ei.
$HADOOP_HOME/bin/hdfs dfs -ls /
Vaihe 3) Sian konfigurointi.
Siirry ensin kansioon $PIG_HOME/conf ja säilytä kopio alkuperäisestä ominaisuustiedostosta.
cd $PIG_HOME/conf
sudo cp pig.properties pig.properties.original
Avaa pig.properties haluamallasi tekstieditorilla ja määritä lokitiedoston polku käyttämällä tiedostoa pig.logfile.
sudo gedit pig.properties
Kirjausohjelma käyttää tätä tiedostoa virheiden kirjaamiseen.
Vaihe 4) Suorita komento 'pig', joka käynnistää Pig-komentokehotteen, joka on interaktiivinen komentotulkki Pig-kyselyille.
pig
Vaihe 5) Suorita alla olevat Pig-komennot järjestyksessä Pig-komennon Grunt-komentokehotteessa.
— A. Lataa tiedot sisältävä tiedosto.
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);
Paina Enter tämän komennon jälkeen.
— B. Ryhmittele tiedot Maa-kentän mukaan.
GroupByCountry = GROUP salesTable BY Country;
— C. Luo jokaiselle 'GroupByCountry'-muuttujassa olevalle tuplelle merkkijono muotoa Maan nimi: Myytyjen tuotteiden lukumäärä.
CountByCountry = FOREACH GroupByCountry GENERATE CONCAT((chararray)$0,CONCAT(':',(chararray)COUNT($1)));
Paina Enter tämän komennon jälkeen.
— D. Tallenna tietovirran tulokset HDFS:n hakemistoon 'pig_output_sales'.
STORE CountByCountry INTO 'pig_output_sales' USING PigStorage('\t');
Tämän komennon suorittaminen vie jonkin aikaa. Kun se on tehty, sinun pitäisi nähdä seuraava näyttö.
Vaihe 6) Tulos näkyy komentoliittymän kautta muodossa
$HADOOP_HOME/bin/hdfs dfs -cat pig_output_sales/part-r-00000
Tulokset ovat nähtävissä myös web-käyttöliittymän kautta.
Avaa http://localhost:50070/ verkkoselaimessa.
Portti 50070 on NameNoden verkkokäyttöliittymä Hadoop 2:ssa. Hadoop 3 siirsi saman sivun porttiin 9870, joten käytä kyseistä osoitetta, jos klusterisi käyttää Hadoop 3:a.
Valitse nyt 'Selaa tiedostojärjestelmää' ja siirry ylös kansioon /user/hduser/pig_output_sales.
Avaa part-r-00000 lukeaksesi skriptin tuottamat maa- ja tuotemääräparit.
Apache Pig vs. Hive vs. MapReduce
Pig-työtä arvioidaan harvoin yksinään. Tavallinen kysymys on, kuuluuko työpaikka Pig-työryhmään. Hive tai käsin kirjoitetussa MapReduce-ohjelmassa, koska kaikki kolme päätyvät töiksi samaan klusteriin.
| Aspect | MapReduce (Java) | Apache Sika | Apache Hive |
|---|---|---|---|
| liitäntä | Java API | Pig Latin, tietovuon skriptikieli | HiveQL, SQL-murre |
| Vatsalihasten tasotracTUKSEN | Matala | Keskikova | Korkea |
| Tyypillinen käyttäjä | Java kehittäjä | Tietoinsinööri tai tutkija | SQL-osaamista tunteva analyytikko |
| Sopiva data | Mikä tahansa, käsin hoidettu | Rakenteinen ja puolirakenteinen; skeema on valinnainen latausaikana | Metastoreen rekisteröidyt strukturoidut taulukot |
| Code tilavuus | Useimmat linjat | Vähemmän rivejä | Vähiten rivejä kyselyssä |
| Toimii nimellä | MapReduce-työ | Kääntyy MapReduceen, Teziin tai muuhun Spark työpaikat | Kääntyy MapReduceen, Teziin tai muuhun Spark työpaikat |
| Paras | Täysi hallinta ja mukautettu logiikka | Monivaiheiset ETL-putkistot | Ad hoc -kyselyt ja raportointi |
Käytännössä jako on suoraviivainen. Käytä Hiveä, kun data näyttää jo taulukolta ja kysymys SQL:ltä. Käytä Pig-käskyä, kun syöte on sekava, kun putki on muunnosketju yhden kyselyn sijaan tai kun saman komentosarjan on haarauduttava ja liityttävä uudelleen. Käytä MapReducea vain, kun kumpikaan ei ole absoluuttinen.tracvoi ilmaista logiikan, koska rivimäärä kasvaa nopeasti.
Sika istuu myös mukavasti muun ekosysteemin vieressä. Sqoop ja Flume laske raakadata, Pig tai Hive muokkaavat sitä ja aikatauluttaja, kuten Apache Oozie ketjuttaa vaiheet toistettavaksi putkeksi. Katso laajempi kuva siitä, mihin nämä työkalut sopivat, oppaasta big data ja yhteenveto big data -työkalut; kaupallisen ETL-vaihtoehdon käsin kirjoitetuille komentosarjoille löydät osoitteesta Talend.























