Hadoop Pig bemutató: Mi az Apache Pig? Architecture, Példa
⚡ Okos összefoglaló
Az Apache Pig egy magas szintű platform nagy adathalmazok Hadoopon történő elemzésére, amely a Pig Latin adatfolyam-nyelvet egy futtatókörnyezettel párosítja, amely minden szkriptet MapReduce, Tez vagy más nyelvre fordít. Spark automatikusan elvégzi a munkákat.
Ez az oktatóanyag az Apache Pig mögött meghúzódó ötlettel kezdődik, majd végigvezeti a telepítésén és egy teljes Pig latin írásrendszer futtatásán.
Mi az Apache Pig?
A disznó egy magas szintű programozási nyelv hasznos nagy adathalmazok elemzéséhez. A Pig a Yahoo! fejlesztési erőfeszítéseinek eredménye.
Egy MapReduce keretrendszerben a programokat Map és Reduce szakaszok sorozatára kell lefordítani. Ez azonban nem egy olyan programozási modell, amelyet az adatelemzők ismernek. Tehát ennek a szakadéknak az áthidalására egy abstracA Pig nevű épületet a tetejére építették. Hadoop.
Az Apache Pig lehetővé teszi az emberek számára, hogy jobban összpontosítsanak a tömeges adathalmazok elemzésére, és kevesebb időt töltsenek MapReduce programok írásával. A disznókhoz hasonlóan, amelyek bármit megesznek, az Apache Pig programozási nyelv is bármilyen adattal működik. Ezért a név, Pig! (Pig!) Az alábbi projekt kabalafigurája is ugyanezt a lényeget hangsúlyozza.
A projekt továbbra is aktív. Apache Pig 0.18.0 2025. szeptember 15-én jelent meg, és támogatást nyújt a Hadoop 3, a Tez 0.10 és a Hive 3 rendszerekhez. Spark 3, HBase 2 és Python 3-ben, a szerint Apache Pig kiadási oldalAz alábbi útmutató eredetileg a sokkal régebbi 0.12.1-es sorhoz készült, így néhány lépésnél megjegyzés található, ahol a jelenlegi kiadás másképp viselkedik.
Disznó Architectúra
A Pig architektúrája két összetevőből áll:
- disznó latin, ami egy nyelv
- futásidejű környezet, a Pig Latin programok futtatásához.
Egy Pig Latin program műveletek vagy transzformációk sorozatából áll, amelyeket a bemeneti adatokon alkalmaznak a kimenet előállítása érdekében. Ezek a műveletek egy adatfolyamot írnak le, amelyet a Hadoop Pig végrehajtási környezete végrehajtható reprezentációvá alakít. Alatta ezen transzformációk eredményei a következők sorozata: MapReduce olyan feladatok, amelyekről a programozó nincs is tudatában. Tehát bizonyos értelemben a Pig in Hadoop lehetővé teszi a programozó számára, hogy az adatokra koncentráljon a végrehajtás természete helyett.
A Pig Latin egy viszonylag merev nyelv, amely az adatfeldolgozásból ismert kulcsszavakat használ, például az Összekapcsolás (Join), a Csoportosítás (Group) és a Szűrés (Filter). Az alábbi ábra tracEgy szkriptet küld a Grunt shellből az elemzőn, optimalizálón és fordítón keresztül a végrehajtó motorhoz.
Végrehajtási módok
A Hadoopban található Pignek két végrehajtási módja van, és a későbbi telepítési útmutató mindkettőt használja:
- Helyi mód: Ebben a módban a Hadoop Pig nyelv egyetlen JVM és a helyi fájlrendszert használja. Ez a mód csak kis adathalmazok elemzésére alkalmas Pig in Hadoop használatával.
- MapReduce mód: Ebben a módban a Pig Latin nyelven írt lekérdezéseket a rendszer MapReduce feladatokká alakítja, és egy Hadoop klaszteren futtatja őket (a klaszter lehet pszeudo-elosztott vagy teljesen elosztott). A MapReduce mód egy teljesen elosztott klaszterrel hasznos a Pig nagy adathalmazokon történő futtatásához.
Ez a kettő a klasszikus páros. A jelenlegi kiadások valójában hat végrehajtási típust, vagy exectype-t tesznek elérhetővé, amelyek mindegyike ugyanazzal a -x zászló, a dokumentáció szerint Pig 0.18.0 Első lépések útmutató.
| Végrehajtási típus | parancs | Ahol a munka folyik |
|---|---|---|
| helyi | pig -x helyi | Egyetlen JVM a helyi fájlrendszeren |
| Tez helyi | pig -x tez_local | Egyetlen JVM a Tez futtatókörnyezet használatával (kísérleti) |
| Spark helyi | pig -x spark_local | Egyetlen JVM, amely a Spark futásidejű (kísérleti) |
| MapReduce | pig vagy pig -x mapreduce | Egy Hadoop klaszter HDFS-sel; ez az alapértelmezett |
| tézis | pig -x tez | Egy Tez motort futtató Hadoop klaszter |
| Spark | pig -x szikra | A Spark, YARN vagy Mesos klaszter HDFS-sel |
Pig Latin adattípusok és Operatorzok
Mielőtt szkriptet írnánk, érdemes tudni, hogy a Pig mit tud tárolni, és mit tud vele csinálni. Az adatmodell teljesen beágyazott, ami lehetővé teszi a Pig számára, hogy naplófájlokat és más lazán strukturált bemeneteket olvasson, amelyeket egy relációs tábla elutasítana.
A Pig Latin két típuscsaládot kínál:
- Skalár típusok:
int,long,float,double,chararray,bytearray,boolean,datetime,bigintegerés abigdecimalA későbbi példa szkript minden oszlopot a következőként deklarál.chararray. - Komplex típusok: a kettős egy rendezett mezőhalmaz, amely sorként viselkedik; a táska egy rendezetlen tuple-halmaz, és úgy viselkedik, mint egy tábla; a térkép kulcs-érték párok halmaza, amelyek kulcsának egynek kell lennie.
chararray.
Az üzemeltetők kevés munkakörbe tartoznak, és néhányan közülük szinte minden csővezetéket szállítanak:
| Operator | Mit csinál |
|---|---|
| BETÖLTÉS / TÁROLÁS | Olvasson be egy relációt a fájlrendszerből, és írja ki az eredményt |
| FILTER | Csak azokat a tuple-öket tartsa meg, amelyek megfelelnek egy feltételnek |
| FOREACH … GENERÁLÁS | Oszloponkénti munka, új mezők létrehozása |
| CSOPORT / KOCSOPORT | Egy, vagy két vagy több reláció csoportosítása egy kulcs alapján |
| JOIN | Relációk kombinálása belső vagy külső illesztéssel |
| EGYESÜLÉS / SZÉTVÁLASZTÁS | Relációk egyesítése, vagy egy reláció több részre osztása |
| RENDELÉS SZERINT / KÜLÖNBÖZŐ / LIMITÁLÁS | Rendezés, duplikátumok eltávolítása és a tuple-k számának korlátozása |
| KIÍRÁS / LEÍRÁS / MAGYARÁZAT / ILLUSZTRÁCIÓ | Eredmények, sémák, végrehajtási tervek és mintafuttatások vizsgálata |
A négy ellenőrző operátornak Grunt gyorsbillentyűi is vannak, ami időt takarít meg.ping hibakeresés közben: \d a DUMP-hoz, \de a LEÍRÁSHOZ, \e a MAGYARÁZAT és \i az ILLUSTRATE számára.
Előfeltételek
A Pig egy kliensoldali eszköz. Elemzi a szkripteket, megtervezi a munkát és elküldi a feladatokat, de nem biztosít tárhelyet vagy saját klasztert, ezért először egy működő Hadoop telepítésnek kell léteznie. Az Apache követelménylistája rövid.
| Összetevő | Követelmény | Miért van rá szükség |
|---|---|---|
| Hadoop | Hadoop 2.x vagy 3.x, exportált HADOOP_HOME-mal | Biztosítja a HDFS-t és a végrehajtó motort. HADOOP_HOME nélkül a Pig 0.18.0 egy beágyazott Hadoop 2.7.3-ra vált vissza. |
| Java | Java 1.7 vagy újabb, a JAVA_HOME telepítési gyökérkönyvtárral beállítva | A Pig és a Hadoop démonok Java programok |
| Python (Opcionális) | Python 2.7 | Csak streameléshez szükséges Python felhasználó által definiált függvények |
| Hangya (opcionális) | Hangya 1.8 | Csak akkor szükséges, ha a Pig-et forrásból építjük fel vagy újrafordítjuk |
Két gyakorlati szempont is szerepel a lista mellett. Először is, futtass mindent Linux felhasználóként, amelynek már van saját könyvtára a HDFS és írási engedélyt a bele; ez az oktatóanyag ezt használja hduser, a Hadoop telepítése során létrehozott fiók. Másodszor, indítsa el a fürtöt a Pig elindítása előtt MapReduce módban, mert a Pig azonnal leáll, ha a NameNode és a ResourceManager nem működik. Ha a Hadoop még nincs telepítve, akkor a következőképpen dolgozzon: hogyan kell telepíteni a Hadoop-ot először.
A Pig letöltése és telepítése
Ebben az Apache Pig oktatóanyagban megtudjuk, hogyan kell letölteni és telepíteni a Pig alkalmazást:
Mielőtt elkezdenénk a tényleges folyamatot, győződjünk meg arról, hogy telepítve van a Hadoop. Változtassuk meg a felhasználót 'hduser'-re (ez az azonosító, amelyet a Hadoop konfigurálásakor használtunk; átválthatunk a saját Hadoop konfiguráció során használt felhasználói azonosítóra).
Step 1) Töltse le a Pig Hadoop legújabb stabil verzióját a következő tüköroldalak bármelyikéről:
https://pig.apache.org/releases.html
Válassza ki a tar.gz fájlt (és ne az src.tar.gz-t) a letöltéshez, az alábbiak szerint.
Step 2) A letöltés befejezése után keresse meg a letöltött tar fájlt tartalmazó könyvtárat, és helyezze át a tar fájlt arra a helyre, ahová a Pig Hadoop rendszert be szeretné állítani. Ebben az esetben a /usr/local könyvtárba fogunk áthelyezni.
Lépjen abba a könyvtárba, amely a Pig Hadoop fájlokat fogja tartalmazni.
cd /usr/local
Extraca tar fájl tartalmát az alábbiak szerint.
sudo tar -xvf pig-0.12.1.tar.gz
Step 3) Módosítsa a ~/.bashrc fájlt a Pig-hez kapcsolódó környezeti változók hozzáadásához.
Nyisd meg a ~/.bashrc fájlt egy tetszőleges szövegszerkesztőben, és végezd el az alábbi módosításokat.
export PIG_HOME=<Installation directory of Pig> export PATH=$PIG_HOME/bin:$HADOOP_HOME/bin:$PATH
Step 4) Most forrásként használd ezt a környezeti konfigurációt az alábbi parancs használatával.
. ~/.bashrc
Step 5) Újra kell fordítanunk a Pig-et, hogy támogassa a Hadoop 2.2.0-t.
Íme a lépések ehhez.
Menj a Pig saját könyvtárába.
cd $PIG_HOME
Telepítse az Ant-et.
sudo apt-get install ant
Megjegyzés: A letöltés elindul, és az internetsebességtől függően fog tartani.
Fordítsd újra a Pig-et.
sudo ant clean jar-all -Dhadoopversion=23
Kérjük, vegye figyelembe, hogy az újrafordítási folyamat során több összetevő letöltésére kerül sor, ezért a rendszernek csatlakoznia kell az internethez.
Továbbá, ha ez a folyamat valahol elakad, és több mint 20 percig nem lát mozgást a parancssorban, akkor nyomja meg a Ctrl + c billentyűkombinációt, és futtassa újra ugyanazt a parancsot.
A mi esetünkben ez 20 percet vesz igénybe.
Ez az újrafordítási lépés a 0.12.1 korszakhoz tartozik, amikor a szállított jar fájlokat Hadoop 1 és a -Dhadoopversion=23 A flag az Ant buildet a Hadoop 0.23 és 2.x vonalra állította. Az Apache Pig 0.18.0 olyan binárisokat szállít, amelyek már futnak a Hadoop 2.7-es és újabb verzióin, valamint a Hadoop 3-on, így egy aktuális kiadásban általában kicsomagolhatod a tarballt, és egyből az alábbi teszthez ugorhatsz.
Step 6) Tesztelje a Pig telepítését a paranccsal
pig -help
Példa Pig Script
A Pig telepítése után az Apache Pig oktatóanyag további része egy teljes szkriptet futtat. A Pig szkripteket fogjuk használni az egyes országokban eladott termékek számának meghatározásához.
Bemenet: A bemeneti adatkészletünk egy CSV fájl, ÉrtékesítésJan2009.csv.
Step 1) Indítsd el a Hadoopot.
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Step 2) A Big Data-ban lévő Pig egy fájlt vesz a HDFS-ből MapReduce módban, és az eredményeket visszamenti a HDFS-be.
Másolja a SalesJan2009.csv fájlt (amely a helyi fájlrendszeren található a ~/input/SalesJan2009.csv címen) a HDFS (Hadoop Distributed File System) saját könyvtárába.
Ebben az Apache Pig példában a fájl a mappában található. Ha a fájl más helyen van tárolva, akkor azt a nevet kell megadni.
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/input/SalesJan2009.csv /
Ellenőrizd, hogy a fájl valóban át lett-e másolva vagy sem.
$HADOOP_HOME/bin/hdfs dfs -ls /
Step 3) Sertés konfiguráció.
Először is, navigálj a $PIG_HOME/conf mappába, és őrizd meg az eredeti tulajdonságfájl egy másolatát.
cd $PIG_HOME/conf
sudo cp pig.properties pig.properties.original
Nyissa meg a pig.properties fájlt egy választott szövegszerkesztővel, és adja meg a naplófájl elérési útját a pig.logfile paranccsal.
sudo gedit pig.properties
A naplózó ezt a fájlt fogja használni a hibák naplózására.
Step 4) Futtassa a „pig” parancsot, amely elindítja a Pig parancssort, egy interaktív parancsértelmezőt a Pig lekérdezésekhez.
pig
Step 5) A Pig Grunt parancssorában hajtsa végre az alábbi Pig parancsokat sorrendben.
— A. Töltse be az adatokat tartalmazó fájlt.
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);
A parancs után nyomja meg az Enter billentyűt.
— B. Adatok csoportosítása az Ország mező szerint.
GroupByCountry = GROUP salesTable BY Country;
— C. A 'GroupByCountry' minden egyes tuple-jéhez generáljon egy karakterláncot a következő formátumban: Ország neve: Eladott termékek száma.
CountByCountry = FOREACH GroupByCountry GENERATE CONCAT((chararray)$0,CONCAT(':',(chararray)COUNT($1)));
A parancs után nyomja meg az Enter billentyűt.
— D. Tárolja az adatfolyam eredményeit a HDFS 'pig_output_sales' könyvtárában.
STORE CountByCountry INTO 'pig_output_sales' USING PigStorage('\t');
A parancs végrehajtása eltarthat egy ideig. Ha kész, a következő képernyőt kell látnia.
Step 6) Az eredmény a parancssori felületen keresztül látható, mint
$HADOOP_HOME/bin/hdfs dfs -cat pig_output_sales/part-r-00000
Az eredmények webes felületen is megtekinthetők.
Nyissa meg a http://localhost:50070/ címet egy webböngészőben.
Az 50070-es port a NameNode webes felhasználói felülete a Hadoop 2-n. A Hadoop 3 ugyanezt az oldalt a 9870-es portra helyezte át, ezért ezt a címet használja, ha a fürtje Hadoop 3-at futtat.
Most válaszd a „Fájlrendszer böngészése” lehetőséget, és navigálj fel a /user/hduser/pig_output_sales fájlhoz.
Nyissa meg a part-r-00000 part-ot a szkript által létrehozott ország- és termékszám párok beolvasásához.
Apache Pig vs. Hive vs. MapReduce
A Pig kategóriát ritkán értékelik önmagában. A szokásos kérdés az, hogy egy munkakör a Pig kategóriába tartozik-e. Kaptár vagy egy kézzel írott MapReduce programban, mivel mindhárom ugyanahhoz a fürthöz tartozó feladatként végzi.
| Aspect | MapReduce (Java) | Apache Pig | Apache Hive |
|---|---|---|---|
| Felület | Java API | Pig Latin, egy adatfolyam-szkriptelési nyelv | HiveQL, egy SQL dialektus |
| Hasizmok szintjetracCIÓ | Alacsony | közepes | Magas |
| Tipikus felhasználó | Java fejlesztő | Adatmérnök vagy kutató | SQL-ben jártas elemző |
| Adatok, amik megfelelnek | Bármi, kézzel kezelve | Strukturált és félig strukturált; a séma kitöltése betöltéskor opcionális | Metaadattárban regisztrált strukturált táblák |
| Code kötet | A legtöbb vonal | Kevesebb sor | Legkevesebb sor egy lekérdezéshez |
| Fut, mint | Egy MapReduce feladat | MapReduce, Tez vagy más programokba fordítható. Spark munkahelyek | MapReduce, Tez vagy más programokba fordítható. Spark munkahelyek |
| Legjobb itt: | Teljes kontroll és egyéni logika | Többlépcsős ETL-folyamatok | Eseti lekérdezés és jelentéskészítés |
A gyakorlatban a felosztás egyértelmű. A Hive-ot akkor használjuk, ha az adatok már táblázatnak tűnnek, a kérdés pedig SQL-nek. A Pig-et akkor használjuk, ha a bemenet kusza, ha a folyamat transzformációk láncolata egyetlen lekérdezés helyett, vagy ha ugyanazon szkriptnek elágaznia és újracsatlakoznia kell. A MapReduce-t csak akkor használjuk, ha egyik sem.tracA ció kifejezheti a logikát, mivel a sorok száma gyorsan növekszik.
A malac kényelmesen elfér az ökoszisztéma többi része mellett. Sqoop és Flume a nyers adatokat lefoglaljuk, a Pig vagy a Hive formálja azokat, és egy ütemező, például Apache Oozie a lépéseket egy megismételhető folyamattá láncolja össze. Az eszközök illeszkedésének szélesebb körű áttekintéséhez lásd az útmutatót big adatok és a gyűjtőfogalom big data eszközök; a kézzel írott szkriptek kereskedelmi ETL alternatívájáért lásd: Talend.























