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 B DOUBLELebegőpontos szám8 B 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= 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