Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Kazi Sándor Magasszintű nyelvek MR alapokon Hive és Pig 2014."— Előadás másolata:

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

2 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 Deklaratív(abb) környezet Eltolódik a programozási feladat hangsúlya Az a kérdés, mit szeretnénk Kevésbé kérdés (de néha kérdés), hogy pontosan hogyan is HiveQL és Pig Latin Megjelenhetnek sémainformációk (félig-meddig) Típus megkötések Tárolási formátumok Jogosultságok

3 Mikor melyik? – Hive / Pig Mindkettő MR framework feletti A Hive jó nekünk, ha Lekérdezésekhez Az adat már betöltve, ennek egy struktúrált kivonata kell Adott kérdések megválaszolására SQL-ből készülünk átszokni A HiveQL-nél alacsony a belépési küszöb A Pig jó nekünk, ha ETL (Extract-Transform-Load) folyamatokhoz Adatelőkészítésre elemzés előtt Hosszú műveletsorok véghezvitelére Gyakran együtt használják őket Nem teljesen váltják ki egymás funkcionalitásban Pl.: Yahoo, Facebook

4

5 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ó

6 Alapok – Mi a Hive Adattárház megvalósítás Hadoop felett –A MapReduce framework felett Műveletektől függően lehet MR nélkül –Séma csak olvasáshoz (OLAP, nem OLTP) –Félstruktúrált adatokon is –Alapvetően soralapú tárolás Mit nem ad a Hive –Nem biztosít gyors válaszokat ad-hoc lekérdezésekre –Nincs rekord szintű insert/update/delete Saját lekérdező nyelv (HiveQL) –SQL-hez hasonló szintaxis –Magasszintű, deklaratív –Az optimizer lényegében a MapReduce jobbal dolgozik

7 Alapok – Architektúra Metastore Metaadatok az adatokról Metadatok az adatbázisról Táblák Típusos oszlopok Összetett adatstruktúrák is (0NF) Partíciók Statikus illetve dinamikus partíciók Dinamikus partíciók alaphelyzetben kikapcsolva Gyorsítja a partíciókra irányuló lekérdezéseket Vödrök (Buckets) Hash partíciók Gyorsítja a join műveleteket

8 Hive – Kliensek CLI: Command Line Interface HWI: Hive Web Interface –Editor, History, Table/Database browser JDBC, ODBC, Thrift –Adatbázishozzáférés sztandard interfészeken Hue (Beeswax) – :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ális query építés, import/export, stb. –FluidShell – saját szkriptkörnyezet

9 Adatbetöltés – In/External Internal –Adatok ténylegesen a Hive struktúrájában –Adatstruktúra törlésekor az adat is elveszik CREATE TABLE …; LOAD DATA INPATH [OVERWRITE] INTO TABLE ; External –HDFS, mint külső adathely –Az adatok a helyükön maradnak –Adatstruktúra törlésekor csak az absztrakció tűnik el CREATE EXTERNAL TABLE …; LOAD DATA INPATH [OVERWRITE] INTO TABLE ;

10 Adatbetöltés – Adattípusok TípusLeírásMéretPélda TINYINTEgész1 B99, 99Y SMALLINTEgész2 B99, 99S INTEgész4 B99 BIGINTEgész8 B99, 99L BOOLEANBool1 bTrue FLOATLebegőpontos szám4 B3.14159 DOUBLELebegőpontos szám8 B3.14159 DECIMALLebegőpontos decimális szám (max 38)16 B40004, 1E14 STRINGKaraktersorozat…'String', "String" VARCHARKaraktersorozat méretmaximummal…… CHARKarakter…… TIMESTAMPIdőbélyeg (10 -9 s)…… DATEDátum (1 day)…… BINARYBittömb…… STRUCTStruktúra…struct MAPKulcs-érték struktúra…map ARRAYTömb…array UNIONTYPETípusok összeolvasztása (OR művelete)…uniontype

11 Adatbetöltés – Formátum Háromféle határoló karakter (delimiter) 1.Sor (default: soremelés, \n) 2.Oszlop (default: ^A, \001) 3.Összetett struktúra (default: ^B, \002) 4.Map kulcs-érték (default: ^C, \003) CREATE TABLE (…) 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ás ROW FORMAT lehetőség is (SerDe)…

12 Cloudera Impala Impala –Elosztott adattárház, nem MR felett –MPP az HBase és a HDFS adatain –SQL –Interaktív lekérdező engine –Open source –Disztribúciókban: Cloudera, MapR, AWS Kapcsolódó Hive jövő –Hive on Spark: HIVE-7292 jiraHIVE-7292 jira –Stinger.next: from Hive to Hadoop-SQLStinger.next Tehát a Hive és az Impala egyirányba mozognak Csökken az együttes létjogosultságuk Apache Drill

13 HiveQL – Változók Négy namespace 1.hivevar --define key=value --hivevar key=value 2.hiveconf --hiveconf key=value 3.system --hiveconf key=value 4.env (bent read only) -- értékadás SET [ :] = ; -- lekérdezés SET [ :] ; -- alapértelmezett namespace: hivevar

14 HiveQL – DDL (database) CREATE DATABASE [IF NOT EXISTS] [LOCATION ] [COMMENT ]; ALTER DATABASE SET DBPROPERTIES ( = ); DROP DATABASE [IF EXISTS] [CASCADE]; DESCRIBE DATABASE [EXTENDED] ; SHOW DATABASES [LIKE ]; USE ; SHOW TABLES [IN ];

15 HiveQL – DDL (table) CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [.] ( [COMMENT ], …) [COMMENT ] [TBLPROPERTIES ( =, …)] …; ALTER TABLE [.] …; DROP TABLE [IF EXISTS] [.] ; CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [.] LIKE [.] ; CREATE [EXTERNAL] TABLE AS SELECT …; DESCRIBE [EXTENDED] [.] ; SHOW PARTITIONS PARTION( = );

16 HiveQL – DDL (table++) További klózok a CREATE TABLE után: PARTITIONED BY (, …) statikus/dinamikus partícionálás (az oszloplistától külön) CLUSTERED BY (, …) INTO BUCKETS szétdarabolás értékkészlet szerint vödrökbe ROW FORMAT rekordformátum (DELIMITED, SERDE ) STORED AS tárolás formátuma (TEXTFILE, …, INPUTFORMAT, …) STORED BY Hive storage handler osztály (SERDE) LOCATION az adat helye (mentés helye) WITH HINTS = optimalizációs hintek

17 HiveQL – DML (load, insert) LOAD DATA [LOCAL] INPATH [OVERWRITE] INTO TABLE [PARTITION ( [= ], …)]; -- hive.exec.dynamic.partition INSERT [OVERWRITE] TABLE [PARTITION ( [= ], …)] SELECT …; INSERT [OVERWRITE] LOCAL DIRECTORY '/tmp/ca_employees' [PARTITION ( [= ], …)] SELECT …; FROM [ ] INSERT … [INSERT …] …;

18 HiveQL – Lekérdezések Klózok 1.SELECT oszlop, számított érték, alias CASE WHEN THEN … ELSE … END 2.FROM tábla, belső select + alias, JOIN, SEMI JOIN, UNION ALL 3.WHERE CAST( AS ), LIKE, RLIKE 4.GROUP BY 5.HAVING 6.DISTRIBUTE BY / CLUSTER BY partitioning, partitioning + per reducer sort 7.ORDER BY / SORT BY total order, per reducer sort 8.LIMIT

19 HiveQL – Mintavételezés Mintavételezni nagyon fontos lehet: –A fejlesztési idő rövidítésére (tesztelés gyorsítása) –Adatelemzési módszerek támogatására –… SELECT … FROM TABLESAMPLE( ) lehetőségek: – BUCKET OUT OF ON rand() – BUCKET OUT OF ON – PERCENT HDFS blokknál kisebbet nem tudunk visszaadni

20 HiveQL – Nézetek -- nem materializált CREATE VIEW [IF NOT EXISTS] AS [COMMENT ] [TBLPROPERTIES ( =, …)] SELECT …; ALTER VIEW SET TBLPROPERTIES ( =, …); DROP VIEW [IF EXISTS] ; SHOW TABLES [IN ]; DESCRIBE [EXTENDED] [ ]. ; CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [.] LIKE [.] ;

21 HiveQL – Indexek CREATE INDEX ON TABLE (, …) [ ] AS {'HBASE' | } [WITH DEFERRED REBUILD] [IDXPROPERTIES ( =, …)] [COMMENT ] [IN TABLE ] [PARTITIONED BY (, …)]; ALTER INDEX ON TABLE [PARTITION ( =, …)] REBUILD; DROP INDEX [IF EXISTS] ON ; SHOW [FORMATTED] INDEX ON ; EXPLAIN [EXTENDED] SELECT …;

22 HiveQL – Függvények SHOW FUNCTIONS; DESCRIBE FUNCTION [EXTENDED] ; ADD JAR ; CREATE TEMPORARY FUNCTION AS ; DROP TEMPORARY FUNCTION [IF EXISTS] ; ADD FILE ; CREATE TEMPORARY MACRO ( ) …; 3 User Defined Function (UDF) flag: –Deterministic (true), Stateful (false), Distinctlike (false) Depivotálás: explode(), LATERAL VIEW [OUTER]

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

24 HiveQL – Jogosultságok SET hive.security.authorization.enabled=true; SET system:user.name; SHOW GRANT [ON …]; : USER, GROUP, ROLE CREATE ROLE ; GRANT ROLE TO ; REVOKE ROLE … FROM …; GRANT TO ; : ALL, ALTER, CREATE, DROP, INDEX, LOCK, SELECT, SHOW_DATABASE, UPDATE SET TBLPROPERTIES( = ) SET TBLPROPERTIES("PARTITION_LEVEL_PRIVILEGE"="TRUE") hive.security.authorization.createtable.owner.grants hive.security.authorization.createtable.user.grants

25 Hive – Tervezés Table-by-Day minta: CREATE TABLE … PARTITIONED BY (, …); ALTER TABLE ADD PARTITION( =, …); Lehetőleg ne normalizáljunk: –Eleve nem csak relációs adatokat tudunk tárolni –Nincs UPDATE, nincs referenciális integritás garancia :( Többszörös olvasás: –a FROM klóz előrehozása, több művelet együttes felsorolása Tömörítés: –Szinte mindig érdemes Oszlop alapú tárolás: –Ha nagyon sok az oszlop vagy kicsi az értékkészlet –RCFile fájltípus

26 Hive – Konfiguráció hive.cli.print.current.db={true|false} Az aktuálisan kiválasztott adatbázis neve a konzolon. hive.stat.retries.max= Maximum újrapróbálkozások száma. hive.stat.retries.wait= Két újrapróbálkozás közötti idő. hive.mapred.mode={strict|nonstrict} Pontosabb illeszkedés elvárása… hive.enforce.bucketing={true|false} Szeletelés automatizá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ív Reduce indítás.

27 Apache Pig

28 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ós műveletek Join –UDF –Szerkezetek –Streaming –MapReduce –Beállítások –Preprocesszor –Tesztelés

29 Alapok – Mi a Pig Adatkezelő szkriptnyelv –A MapReduce framework felett –Félstruktúrált adatokon is, sokféle adattípuson –A MapReduce feletti natív párhuzamosíthatóság a cél –Hadoop ETL folyamatok tipikus platformja Mit nem ad a Pig –Nem SQL, nem egy IDE –Nincs rekord szintű insert/update/delete Saját szkriptnyelv (Pig latin) –Referenciák beágyazása, optimalizálás Célok –Pigs eat anything, Pigs can live (almost) anywhere –Pigs are domestic animals ( ~ user friendly) –Pigs fly ( ~ gyors)

30 Alapok – Belső működés Kétféle végrehajtási mód –Local mode java -cp $PIGDIR/pig.jar org.apache.pig.Main -x local script.pig »Lehetnek Warning-ok az outputban »Prototípus gyártáshoz –MapReduce mode java -cp $PIGDIR/pig.jar:$HCONF org….Main script.pig Végrehajtás szakaszai: 1.Input: Pig latin kód (data flow language) 2.Irányított, körmentes gráf 3.MapReduce workflow

31 Alapok – WordCount

32 Interfészek – Grunt és Hue Grunt CLI – interaktív parancssoros interfé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

33 Interfészek – Egyéb ElephantBird Mindenféle Input- és OutputFormatok 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ő

34 Adatmodell – Típusok Skalár típusok Int10 long1000L float6.9f3.2e-3f double6.93.2e-3 chararray'string''elso\nmasodik\u0001' bytearray- Komplex típusok map: (chararray, value) dictionary… a value bytearray-ként ['nev'#'Antal', 'foglalkozas'#'mosogepszerelo'] tuple: fix méretű, rendezett elemhalmaz('bob', 92) bag: tuple-ök halmaza{('alice', 532), ('bob', 92), …} NINCS set típus NULL koncepció, mint az SQL-ben

35 Adatmodell – Sémák dataset = load 'dataset' as (x:chararray, y:chararray, z:float); Adattípusok megadására van lehetőség (séma) Bármilyen tuple-re megadható Megadható bármilyen tuplehalmazra is (pl.: bag) Ha nem adjuk meg akkor a legjobb tippjeivel dolgozik Az alapvető szám típus a double Egyszerű típusokon:as (x: ) Komplex típusokon as (x:map[])as (x:map[int]) as (x:tuple())as (x:tuple(y:int, z:int)) as (x:bag{})as (x:bag{ :(y:int, z:int)}) Castolás (csonkolás lehetséges; null lehetséges) Ahogy procedurálisan megszokott: (int)x mdata = load 'mydata' using HCatLoader();

36 Pig Latin – Alapok Az utasításokat ;-vel zárjuk Aliasokat / referenciákat használunk A = load 'sample_table' (column1, column2, column3); B = filter A by column3 > 0; C = foreach B generate UPPER(column1); dump C; Lehet ugyanazt a nevet is használni, de nem ajánlott Rontja az olvashatóságot Nem tudja segíteni a memóriakezelést Angol betűvel kezdődő alfanumerikus nevek (_ is megengedett) Case sensitive is, meg nem is Kulcsszavak NEM Relációk, mezők, referenciák és függvények nevei IGEN SQL-stílusban kommentelhetünk -- után a sorkomment/* */ között a blokk-komment

37 Pig Latin – Input / Output LOAD [USING ] [AS ]; : abszolút vagy relatív ('home/ '-ből) path, object : sémainformációk (oszlopnevek, típusok) : valamilyen betöltési függvény PigStorage: csv, tsv beolvasás (default) TextLoader: text beolvasás HBaseStorage: hbase-ből olvasás … STORE INTO [USING ]; DUMP ;-- felületre DESCRIBE ;-- séma kiírása Alias szinte bármi elé mehet: [ = ] Globok: ?, *, [abc], [a-z], [^abc], [^a-z], \*, {ab, cd}

38 Pig Latin – Relációs 1/2 FOREACH GENERATE ;-- minden elemre : Oszlopok, oszlopintervallum (oszlop1..oszlop2), pozíciók ($0) Függvény eredménye (UDF, ?:, aritmetika)  névtelen lesz Átnevezett oszlop, függvény, stb. ( AS ) FILTER BY ;-- szűrés : Hasonlító operátorok ==, !=, >, =, <=, IS [NOT] NULL Reguláris kifejezés: [NOT] MATCHES GROUP BY ;-- csoportosítás : Kifejezés ~ Kifejezések zárójelben, vesszővel elválasztva Tipikusan FOREACH és aggregáló függvények társaságában

39 Pig Latin – Relációs 2/2 ORDER BY ;-- rendezés : akár több feltételt is felsorolva Oszlop és ASC vagy DESC DISTINCT ;-- ismétlődésszűrés JOIN [ ], …;-- illesztés : BY, : kb. : a szokásos, az illesztés típusa LIMIT ;-- sorszámlimit Jelenleg nem azt csinálja, amit a head parancs… :( SAMPLE ;-- véletlen mintavétel PARALLEL ;-- reducerek száma bármilyen RANK BY ;-- sorszámozás

40 Pig Latin – UDF Vannak beépített function-ök Csomó hasznos dolog már library-ből elérhető PiggyBank, DataFu UDF = User Defined Function Java class használata REGISTER ; …. (…) …; Névrövidítés definícióval: DEFINE. (); Statikus java függvények: DEFINE InvokeFor (, ); Python UDF használat példa (export PYTHONPATH=…): REGISTER example.py USING jython AS bballudfs; … bballudfs.example(…) …

41 Pig Latin – Szerkezetek FOREACH … Flatten: lista kisimítása (~ keresztszorzat, Hive explode()) “?:” operátorral és az isEmpty()-vel kezelhető az üres lista is Beágyazott foreach daily = LOAD 'NYSE_daily' AS (exchange, symbol); grpd = GROUP daily BY exchange uniqcnt = FOREACH grpd { sym = daily.symbol; uniq_sym = DISTINCT sym; GENERATE group, COUNT(uniq_sym);} JOIN … USING ; : 'replicated', 'skewed', 'merge', … COGROUP BY, BY …; UNION ;-- konkatenálás (!) CROSS ;-- keresztszorzat (!!!)

42 Pig Latin – Streaming STREAM THROUGH [AS ]; divs = LOAD 'table' AS (a, b); highdivs = STREAM divs THROUGH `example.pl` AS (a, b); Rövid név megadása DEFINE-nal DEFINE ex `example.pl` ship('example.pl'); divs = LOAD 'table' AS (a, b); highdivs = STREAM divs THROUGH ex AS (a, b); Egyéb szükséges fájlok átadása DEFINE ex `example.pl` ship('example.pl', 'other.pm'); divs = LOAD 'table' AS (a, b); highdivs = STREAM divs THROUGH ex AS (a, b); Distributed Cache DEFINE ex `ex.pl` cache('/data/shared/data#exdata'); Input, Output DEFINE ex `ex.pl abc def` input('abc') output('def');

43 Pig Latin – MapReduce Alap MapReduce hívás MAPREDUCE STORE INTO 'input' LOAD 'output' AS ; A szokásos LOAD és STORE paraméterek működnek… Speciális paraméterezés MAPREDUCE STORE INTO 'input' LOAD 'output' AS `. input output`;

44 Pig Latin – Beállítások SET ; SET default_parallel 3; SET job.name my_job; users = LOAD 'users'; … A partitioner alaphelyzetben felü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 PARTITION BY partpkg.part PARALLEL 10;

45 Pig Latin – Preprocesszor Paraméterbehelyettesítés yesterday = FILTER daily BY date == '$DATE'; Ha nincs megadva futtatáskor, hibát kapunk… pig -p DATE=2014-12-18 daily.pig Paramfile: = sorok, # a kommentjel Makrók DEFINE ( ) RETURNS { }; A makró törzsében a paraméterek (out is) neve elé $-jelet kell írni Előnézet is van a -dryrun paramétert használva… Pigception [SET pig.import.search.path ' [,…]';] IMPORT ' '; Kódbehelyettesítés, egy közös namespace Egy fájl csak egyszer lehet (makró kell a töbszöröshöz)

46 Pig – Tesztelés A sémát tudjuk ellenőrizni egy-egy aliasnál DESCRIBE ; Ha az nem futásidőben derül ki A Pig igyekszik elrejteni a MapReduce részleteket, de: ASCII-art végrehajtási terv: pig -x local -e 'explain -script e.pig' Grafikus végrehajtási terv: … -dot -out e.dot Ránézhetünk az előálló adatok struktúrájára is pig -e 'illustrate -script i.pig' v0.8-től kezdődően minden futtatás végén statisztkákat is kapunk Optimalizációs feature-ök kikapcsolhatók a -t paraméterrel SplitFilter, MergeFilter, PushUpFilter, PushDownForEachFlatten, ColumnMapKeyPrune, LimitOptimizer, AddForeach, MergeForeach, LogicalExpressionSimplifier, All


Letölteni ppt "Kazi Sándor Magasszintű nyelvek MR alapokon Hive és Pig 2014."

Hasonló előadás


Google Hirdetések