1 / 45

Hive és Pig

Hive és Pig. Kazi Sándor. Magasszintű nyelvek MR alapokon. 2014. MapReduce – Hive / Pig. Teljes workflow egyben Nem nekünk kell a folyamatok egyes belső állapotait kezelni Optimalizációs lehetőség MapReduce jobok belseje , sorrend Akár a teljes feladat ismert

Download Presentation

Hive és Pig

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hive és Pig Kazi Sándor Magasszintűnyelvek MR alapokon 2014.

  2. MapReduce – Hive / Pig Teljes workflow egyben Nemnekünkkell a folyamatokegyesbelsőállapotaitkezelni Optimalizációslehetőség MapReducejobokbelseje, sorrend Akár a teljesfeladatismert Deklaratív(abb) környezet Eltolódik a programozásifeladathangsúlya Az a kérdés, mitszeretnénk Kevésbékérdés (de néhakérdés), hogypontosanhogyan is HiveQLés Pig Latin Megjelenhetneksémainformációk (félig-meddig) Típusmegkötések Tárolásiformátumok Jogosultságok

  3. Mikormelyik? – Hive / Pig Mindkettő MR framework feletti A Hive jónekünk, ha Lekérdezésekhez Azadatmárbetöltve, ennekegystruktúráltkivonatakell Adottkérdésekmegválaszolására SQL-bőlkészülünkátszokni A HiveQL-nélalacsony a belépésiküszöb A Pig jónekünk, ha ETL (Extract-Transform-Load) folyamatokhoz Adatelőkészítésreelemzéselőtt Hosszúműveletsorokvéghezvitelére Gyakranegyütthasználjákőket Nemteljesenváltjákkiegymásfunkcionalitásban Pl.: Yahoo, Facebook

  4. Tartalom Alapok • Architektúra Kliensek • Csomagban • Egyéb Adatbetölés • Internal/External • Adattípusok • Formátum Impala HiveQL • DDL • DML • Lekérdezések • Mintavételezés • Nézetek • Indexek, Végrehajtás • Függvények • Streaming • Jogosultságok Tervezés, Konfiguráció

  5. Alapok – Mi a Hive AdattárházmegvalósításHadoopfelett • AMapReduce framework felett • Műveletektőlfüggőenlehet MR nélkül • Sémacsakolvasáshoz (OLAP, nem OLTP) • Félstruktúráltadatokon is • Alapvetőensoralapútárolás Mitnem ad a Hive • Nembiztosítgyorsválaszokat ad-hoc lekérdezésekre • Nincsrekordszintű insert/update/delete Sajátlekérdezőnyelv (HiveQL) • SQL-hezhasonlószintaxis • Magasszintű, deklaratív • Az optimizer lényegében a MapReducejobbaldolgozik

  6. Alapok – Architektúra Metastore Metaadatokazadatokról Metadatokazadatbázisról Táblák TípusososzlopokÖsszetettadatstruktúrák is (0NF) Partíciók Statikusilletvedinamikuspartíciók Dinamikuspartíciókalaphelyzetbenkikapcsolva Gyorsítja a partíciókrairányulólekérdezéseket Vödrök (Buckets) Hash partíciók Gyorsítja a join műveleteket

  7. Hive – Kliensek CLI: Command Line Interface HWI: Hive Web Interface • Editor, History, Table/Database browser JDBC, ODBC, Thrift • Adatbázishozzáféréssztandardinterfészeken Hue (Beeswax) – <server>:8000 (default port) • Editor (syntax highlighting, save/load), History, Table/Database browser Qubole – Big Data as a Service • Query Optimizer (Hive): cache, job optmizier Aqua Data Studio • Vizuálisquery építés, import/export, stb. • FluidShell – sajátszkriptkörnyezet

  8. Adatbetöltés– In/External Internal • Adatokténylegesen a Hive struktúrájában • Adatstruktúratörlésekorazadat is elveszik CREATE TABLE <name> …; LOAD DATA INPATH <path> [OVERWRITE]INTOTABLE <name>; External • HDFS, mint külsőadathely • Azadatok a helyükönmaradnak • Adatstruktúratörlésekorcsakazabsztrakciótűnik el CREATEEXTERNALTABLE <name> …; LOADDATAINPATH <path> [OVERWRITE]INTOTABLE <name>;

  9. Adatbetöltés– Adattípusok

  10. Adatbetöltés– Formátum Háromfélehatárolókarakter (delimiter) • Sor (default: soremelés, \n) • Oszlop (default: ^A, \001) • Összetettstruktúra (default: ^B, \002) • Map kulcs-érték (default: ^C, \003) CREATE TABLE <name> (…) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' STORED AS TEXTFILE; De van másROW FORMAT lehetőség is (SerDe)…

  11. Cloudera Impala Impala • Elosztottadattárház, nem MR felett • MPP azHBaseés a HDFS adatain • SQL • Interaktívlekérdezőengine • Open source • Disztribúciókban: Cloudera, MapR, AWS Kapcsolódó Hive jövő • Hive on Spark: HIVE-7292 jira • Stinger.next: from Hive to Hadoop-SQL Tehát a Hive ésaz Impala egyiránybamozognak • Csökkenazegyütteslétjogosultságuk Apache Drill

  12. HiveQL– Változók Négy namespace • hivevar --define key=value --hivevar key=value • hiveconf --hiveconf key=value • system --hiveconfkey=value • env(bent read only) -- értékadás SET[<namespace>:]<key>=<value>; -- lekérdezés SET[<namespace>:]<key>; -- alapértelmezett namespace: hivevar

  13. HiveQL– DDL (database) CREATE DATABASE [IF NOT EXISTS] <name> [LOCATION <path>] [COMMENT <comment>]; ALTER DATABASE <name> SET DBPROPERTIES (<key> = <value>); DROP DATABASE [IF EXISTS] <name> [CASCADE]; DESCRIBE DATABASE [EXTENDED] <name>; SHOWDATABASES [LIKE <pattern>]; USE <name>; SHOW TABLES [IN <database>];

  14. HiveQL– DDL (table) CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [<database>.]<table>( <column> <type> [COMMENT <comment>], …) [COMMENT <comment>] [TBLPROPERTIES (<key> = <value>, …)] …; ALTER TABLE[<database>.]<table> …; DROP TABLE [IF EXISTS] [<database>.]<table>; CREATE [EXTERNAL]TABLE [IF NOT EXISTS] [<database>.]<table> LIKE[<database>.]<table>; CREATE[EXTERNAL]TABLE AS SELECT …; DESCRIBE [EXTENDED] [<database>.]<table>; SHOW PARTITIONS <partitions> PARTION(<column>=<value>);

  15. HiveQL– DDL (table++) Továbbiklózok a CREATE TABLEután: PARTITIONED BY (<column> <type>, …) statikus/dinamikuspartícionálás(azoszloplistátólkülön) CLUSTERED BY (<column>, …) INTO <b> BUCKETS szétdarabolásértékkészletszerintvödrökbe ROW FORMAT <format> rekordformátum (DELIMITED, SERDE <class>) STORED AS <format> tárolásformátuma (TEXTFILE, …, INPUTFORMAT <format>, …) STORED BY <store> Hive storage handler osztály (SERDE) LOCATION <path> azadathelye (mentéshelye) WITH HINTS <name>=<value> optimalizációshintek

  16. HiveQL– DML (load, insert) LOAD DATA [LOCAL] INPATH <path> [OVERWRITE] INTO TABLE <table> [PARTITION (<column>[=<value>], …)]; -- hive.exec.dynamic.partition INSERT [OVERWRITE] TABLE <table> [PARTITION(<column>[=<value>], …)] SELECT …; INSERT [OVERWRITE] LOCAL DIRECTORY '/tmp/ca_employees' [PARTITION (<column>[=<value>], …)] SELECT …; FROM <table> [<alias>] INSERT … [INSERT …] …;

  17. HiveQL– Lekérdezések Klózok • SELECT oszlop, számítottérték, alias CASE WHEN <bool> THEN <value> … ELSE … END • FROM tábla, belső select + alias, JOIN, SEMI JOIN, UNION ALL • WHERE CAST(<ertek> AS <tipus>), LIKE, RLIKE • GROUP BY • HAVING • DISTRIBUTE BY / CLUSTER BY partitioning, partitioning + per reducer sort • ORDER BY / SORT BY total order, per reducer sort • LIMIT

  18. HiveQL– Mintavételezés Mintavételezninagyonfontoslehet: • A fejlesztésiidőrövidítésére (tesztelésgyorsítása) • Adatelemzésimódszerektámogatására • … SELECT … FROM <table> TABLESAMPLE(<sample>) <sample> lehetőségek: • BUCKET <n> OUT OF <N> ON rand() • BUCKET<n> OUTOF <N> ON<oszlop> • <percent> PERCENT • HDFS blokknálkisebbetnemtudunkvisszaadni

  19. HiveQL– Nézetek -- nemmaterializált CREATE VIEW [IF NOT EXISTS]<view> AS [COMMENT <comment>] [TBLPROPERTIES (<key>=<value>, …)] SELECT …; ALTER VIEW <view> SET TBLPROPERTIES (<key>=<value>, …); DROP VIEW [IF EXISTS]<view>; SHOW TABLES [IN <database>]; DESCRIBE [EXTENDED] [<database>].<view>; CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [<database>.]<table> LIKE [<database>.]<view>;

  20. HiveQL– Indexek CREATEINDEX <index> ONTABLE <table>(<column>, …) [<splitting>] AS {'HBASE' | <handler>} [WITH DEFERRED REBUILD] [IDXPROPERTIES (<name>=<value>, …)] [COMMENT <comment>] [INTABLE <indextable>] [PARTITIONEDBY (<column>, …)]; ALTER INDEX <index> ON TABLE <table> [PARTITION (<column>=<value>, …)] REBUILD; DROPINDEX [IFEXISTS] <index> ON <table>; SHOW [FORMATTED] INDEX ON <table>; EXPLAIN [EXTENDED] SELECT …;

  21. HiveQL– Függvények SHOW FUNCTIONS; DESCRIBE FUNCTION [EXTENDED] <func>; ADDJAR <path>; CREATETEMPORARYFUNCTION <func> AS <class>; DROPTEMPORARYFUNCTION [IFEXISTS] <func>; ADDFILE <file>; CREATETEMPORARYMACRO<name>(<value> <type>) …; 3 User Defined Function (UDF) flag: • Deterministic (true), Stateful (false), Distinctlike (false) Depivotálás: explode(), LATERAL VIEW [OUTER]

  22. HiveQL– Streaming SELECT TRANSFORM (<columns>) USING <program> AS <columns> FROM …; Pl.: SELECT TRANSFORM (column1, column2) USING '/bin/cat' AS newcolumn1, newcolumn2 FROM a;

  23. Hive – Tervezés Table-by-Day minta: CREATE TABLE <table> … PARTITIONED BY (<column>, …); ALTER TABLE <table> ADD PARTITION(<column>=<value>, …); Lehetőleg ne normalizáljunk: • Elevenemcsakrelációsadatokattudunktárolni • NincsUPDATE, nincsreferenciálisintegritásgarancia :( Többszörösolvasás: • a FROMklózelőrehozása, többműveletegyüttesfelsorolása Tömörítés: • Szintemindigérdemes Oszlopalapútárolás: • Ha nagyonsokazoszlopvagykicsiazértékkészlet • RCFilefájltípus

  24. Hive – Konfiguráció hive.cli.print.current.db={true|false} Azaktuálisankiválasztottadatbázisneve a konzolon. hive.stat.retries.max=<number> Maximum újrapróbálkozásokszáma. hive.stat.retries.wait=<millisec> Kétújrapróbálkozásközöttiidő. hive.mapred.mode={strict|nonstrict} Pontosabbilleszkedéselvárása… hive.enforce.bucketing={true|false} Szeletelésautomatizálásaíráskor (default: false). mapred.map.tasks.speculative.execution={true|false} Spekulatív Map indítás. mapred.reduce.tasks.speculative.execution={true|false} SpekulatívReduce indítás.

  25. Apache Pig

  26. Tartalom Pig • Mi a Pig • Belsőműködés Interfész • Grunt, Hue • ElephantBird • Pygmalion, Piglet, PigPy • DataFu, PiggyBank Adatmodell • Típusok • Sémák Pig Latin • Alapok • Input / Output • Relációsműveletek • Join • UDF • Szerkezetek • Streaming • MapReduce • Beállítások • Preprocesszor • Tesztelés

  27. Alapok – Mi a Pig Adatkezelőszkriptnyelv • AMapReduce framework felett • Félstruktúráltadatokon is, sokféleadattípuson • A MapReducefelettinatívpárhuzamosíthatóság a cél • Hadoop ETL folyamatoktipikusplatformja Mitnem ad a Pig • Nem SQL, nemegy IDE • Nincsrekordszintű insert/update/delete Sajátszkriptnyelv (Pig latin) • Referenciákbeágyazása, optimalizálás Célok • Pigs eat anything, Pigs can live (almost) anywhere • Pigs are domestic animals ( ~ user friendly) • Pigs fly ( ~ gyors)

  28. Alapok – Belsőműködés Kétfélevégrehajtásimód • Local mode java -cp $PIGDIR/pig.jar org.apache.pig.Main -x local script.pig • Lehetnek Warning-ok azoutputban • Prototípusgyártáshoz • MapReduce mode java -cp $PIGDIR/pig.jar:$HCONF org….Main script.pig Végrehajtásszakaszai: • Input: Pig latinkód (data flow language) • Irányított, körmentesgráf • MapReduce workflow

  29. Alapok – WordCount

  30. Interfészek – Grunt és Hue Grunt CLI – interaktívparancssorosinterfész (pig parancs) Pig parancsok, HDFS utasítások, job-menedzsment: cat, clear, fs, sh, cd, cp, copyFromLocal, copyToLocal, dump, describe, aliases, explain, help, history, kill, ls, mv, mkdir, pwd, quit, register, rm, rmf, set, illustrate, run, exec, scriptDone Hue Web felület Hortonworks: 8000-s port Cloudera: 8888-s port Syntax highlighting Mentés / Betöltés (szkriptek) PIG Helper JAR feltöltés

  31. Interfészek– Egyéb ElephantBird Mindenféle Input- ésOutputFormatok Pig, Hive, HBase, stb. Twitter által open source-olt Pygmalion Apache Cassandra integráció Piglet Ruby integráció Pigpy Python integráció PiggyBank / DataFu Pig UDF (user defined function) kollekciók AWS AWS-en is elérhető

  32. Adatmodell– Típusok Skalártípusok Int 10 long 1000L float 6.9f 3.2e-3f double 6.9 3.2e-3 chararray 'string' 'elso\nmasodik\u0001' bytearray - Komplextípusok map: (chararray, value) dictionary… a value bytearray-ként ['nev'#'Antal', 'foglalkozas'#'mosogepszerelo'] tuple: fix méretű, rendezettelemhalmaz('bob', 92) bag: tuple-ökhalmaza {('alice', 532), ('bob', 92), …} NINCS set típus NULL koncepció, mint az SQL-ben

  33. Adatmodell– Sémák dataset = load 'dataset' as (x:chararray, y:chararray, z:float); Adattípusokmegadására van lehetőség (séma) Bármilyen tuple-re megadható Megadhatóbármilyentuplehalmazra is (pl.: bag) Ha nemadjuk meg akkor a legjobbtippjeiveldolgozik Azalapvetőszámtípus a double Egyszerűtípusokon: as (x:<type>) Komplextípusokon as (x:map[]) as (x:map[int]) as (x:tuple()) as (x:tuple(y:int, z:int)) as (x:bag{}) as (x:bag{<tuplenev>:(y:int, z:int)}) Castolás(csonkoláslehetséges; null lehetséges) Ahogyprocedurálisanmegszokott: (int)x mdata = load 'mydata' using HCatLoader();

  34. Pig Latin – Alapok Azutasításokat ;-velzárjuk Aliasokat / referenciákathasználunk A = load 'sample_table' (column1, column2, column3); B = filter A by column3 > 0; C = foreach B generate UPPER(column1); dump C; Lehetugyanazt a nevet is használni, de nemajánlott Rontjaazolvashatóságot Nemtudjasegíteni a memóriakezelést Angolbetűvelkezdődőalfanumerikusnevek (_ is megengedett) Case sensitive is, meg nem is Kulcsszavak NEM Relációk, mezők, referenciákésfüggvényeknevei IGEN SQL-stílusbankommentelhetünk -- után a sorkomment /* */ között a blokk-komment

  35. Pig Latin – Input / Output LOAD <file> [USING <loadfunc>] [AS <schema>]; <file>: abszolútvagyrelatív ('home/<username>'-ből) path, object <schema>: sémainformációk (oszlopnevek, típusok) <loadfunc>: valamilyenbetöltésifüggvény • PigStorage: csv, tsvbeolvasás (default) • TextLoader: text beolvasás • HBaseStorage: hbase-bőlolvasás • … STORE <alias> INTO <file> [USING <storefunc>]; DUMP <alias>; -- felületre DESCRIBE <alias>; -- sémakiírása Alias szintebármielémehet: [<alias> = ] Globok: ?, *, [abc], [a-z], [^abc], [^a-z], \*, {ab, cd}

  36. Pig Latin – Relációs 1/2 FOREACH <alias> GENERATE <genexpr>; -- mindenelemre <genexpr>: • Oszlopok, oszlopintervallum (oszlop1..oszlop2), pozíciók ($0) • Függvényeredménye (UDF, ?:, aritmetika)  névtelenlesz • Átnevezettoszlop, függvény, stb. (<expr> AS <name>) FILTER <alias> BY <filterexpr>; -- szűrés <filterexpr>: • Hasonlítóoperátorok ==, !=, >, <, >=, <=, IS [NOT] NULL • Reguláriskifejezés: [NOT] <oszl> MATCHES <regexp> GROUP <alias> BY <groupexpr>; -- csoportosítás <groupexpr>: • Kifejezés ~ <genexpr> • Kifejezésekzárójelben, vesszővelelválasztva TipikusanFOREACHésaggregálófüggvényektársaságában

  37. Pig Latin – Relációs 2/2 ORDER <alias> BY<orderexpr>; -- rendezés <orderexpr>: akártöbbfeltételt is felsorolva • OszlopésASCvagyDESC DISTINCT <alias>; -- ismétlődésszűrés JOIN <joinon1> [<jointype>], <joinon2> …; -- illesztés <joinon*>: <alias> BY <cols>, <cols>: kb. <groupexpr> <jointype>: a szokásos, azillesztéstípusa LIMIT <alias> <num>; -- sorszámlimit Jelenlegnemaztcsinálja, amit a head parancs… :( SAMPLE <alias> <ratio>; -- véletlenmintavétel<cmd> PARALLEL <num>; -- reducerekszáma <cmd> bármilyen RANK <alias> BY <orderexpr>; -- sorszámozás

  38. Pig Latin – UDF Vannakbeépített function-ök Csomóhasznosdologmár library-bőlelérhető PiggyBank, DataFu UDF = User Defined Function Java class használata REGISTER <jarpath>; … <package>.<class>(…) …; Névrövidítésdefinícióval: DEFINE <name> <package>.<class>(); Statikus java függvények: DEFINE <name> InvokeFor<javarettype>(<sfunc>, <param>); Python UDF használatpélda (export PYTHONPATH=…): REGISTER example.py USINGjython AS bballudfs; … bballudfs.example(…) …

  39. Pig Latin – Szerkezetek FOREACH … Flatten: listakisimítása (~ keresztszorzat, Hive explode()) “?:” operátorralésazisEmpty()-velkezelhetőazüreslista is Beágyazottforeach daily = LOAD 'NYSE_daily' AS (exchange, symbol); grpd = GROUP daily BY exchange uniqcnt = FOREACHgrpd{ sym = daily.symbol; uniq_sym = DISTINCT sym; GENERATE group, COUNT(uniq_sym);} JOIN … USING <mode>; <mode>: 'replicated', 'skewed', 'merge', … COGROUP <alias1> BY <cols1>, <alias2> BY <cols2> …; UNION <aliases>; -- konkatenálás (!) CROSS <aliases>; -- keresztszorzat (!!!)

  40. Pig Latin – Streaming STREAM <alias> THROUGH <streamprog> [AS <schema>]; divs= LOAD 'table' AS (a, b); highdivs = STREAMdivsTHROUGH `example.pl` AS (a, b); RövidnévmegadásaDEFINE-nal DEFINE ex `example.pl` ship('example.pl'); divs = LOAD 'table' AS (a, b); highdivs= STREAMdivsTHROUGHex AS(a, b); Egyébszükségesfájlokátadása DEFINE ex `example.pl` ship('example.pl', 'other.pm'); divs = LOAD 'table' AS (a, b); highdivs = STREAMdivsTHROUGH ex AS (a, b); Distributed Cache DEFINE ex `ex.pl` cache('/data/shared/data#exdata'); Input, Output DEFINE ex `ex.pl abcdef` input('abc') output('def');

  41. Pig Latin – MapReduce AlapMapReducehívás MAPREDUCE <jarfile> STORE <alias> INTO 'input' LOAD 'output' AS <alias>; A szokásosLOADésSTOREparaméterekműködnek… Speciálisparaméterezés MAPREDUCE <jarfile> STORE <alias> INTO 'input' LOAD 'output' AS <alias> `<package>.<class> input output`;

  42. Pig Latin – Beállítások SET <param> <value>; SETdefault_parallel 3; SET job.name my_job; users = LOAD 'users'; … A partitioneralaphelyzetbenfelüldefiniálható Kivéve: order és skew join esetében REGISTER partpkg.jar; users = LOAD 'users' AS (id, age, zip); grp = GROUP users BY id PARTITIONBYpartpkg.part PARALLEL 10;

  43. Pig Latin – Preprocesszor Paraméterbehelyettesítés yesterday = FILTER daily BY date == '$DATE'; Ha nincsmegadvafuttatáskor, hibátkapunk… pig -p DATE=2014-12-18 daily.pig Paramfile: <param>=<value> sorok, # a kommentjel Makrók DEFINE <name> (<params>) RETURNS <resalias> {<body>}; A makrótörzsében a paraméterek (out is) neveelé $-jeletkellírni Előnézet is van a -dryrunparaméterthasználva… Pigception [SETpig.import.search.path '<path1>[,…]';] IMPORT '<path>'; Kódbehelyettesítés, egyközös namespace Egyfájlcsakegyszerlehet (makrókell a töbszöröshöz)

  44. Pig – Tesztelés A sémáttudjukellenőrizniegy-egyaliasnál DESCRIBE <alias>; Ha aznemfutásidőbenderülki A Pig igyekszikelrejteni a MapReducerészleteket, de: ASCII-art végrehajtásiterv: pig -x local -e 'explain -script e.pig' Grafikusvégrehajtásiterv: … -dot -out e.dot Ránézhetünkazelőállóadatokstruktúrájára is pig -e 'illustrate -script i.pig' v0.8-től kezdődőenmindenfuttatásvégénstatisztkákat is kapunk Optimalizációs feature-ökkikapcsolhatók a -t <name> paraméterrel SplitFilter, MergeFilter, PushUpFilter, PushDownForEachFlatten, ColumnMapKeyPrune, LimitOptimizer, AddForeach, MergeForeach, LogicalExpressionSimplifier, All

More Related