SQL Hadoop felett

Összefoglalás

Ez az olvasólecke a Hadoop ökoszisztéma azon eszközeit veszi górcső alá, amelyek SQL alapú lekérdezést és/vagy adatmanipulálást tesznek lehetővé a HDFS klaszteren tárolt adatfájlokon. Az olvasó áttekintést kap a következő eszközökről: Hive, Impala, Drill, Sqoop. Ezek alapvető célja és funkcionalitása mellett az olvasólecke kitér arra is, hogy miben hasonlítanak illetve különböznek ezek az eszközök, és hogy milyen esetben melyiket célszerű használni. Említést teszünk az egyéb olyan eszközökről is, amelyek Hadoop adatok fölötti struktúrált lekérdezési támogatást nyújtanak, de nem SQL alapúak, mint például az Apache Pig.
A lecke fejezetei:
  • 1. fejezet: Apache Hive eszköz bemutatása (olvasó)
  • 2. fejezet: Apache Impala eszköz bemutatása (olvasó)
  • 3. fejezet: Apache Sqoop és Drill eszközök bemutatása (olvasó)
  • 4. fejezet: Az egyes lekérdező nyelvet támogató eszközök összehasonlítása (olvasó)
Téma típusa: elméleti
Olvasási idő: 45 perc

Book to read, knowledge, lecture, open book, reading book icon 1. fejezet
Apache Hive

Az Apache Hive [1] egy adattárház szoftver, amely elosztottan tárolt hatalmas adathalmazok SQL alapú lekérdezését, írását és kezelését támogatja. Az SQL által használt séma rávetíthető a már tárolt adatokra (tetszőleges strukturált szövegfájl). A felhasználók parancssori kliens vagy JDBC meghajtó segítségével kapcsolódhatnak a Hive-hoz.

A Hive az Apache Hadoop-ra építve (lásd lenti ábra) az alábbiakat nyújtja:

https://1.bp.blogspot.com/-6VBHHXl96t4/WIJp8lQ2c6I/AAAAAAAAAPs/Nyfq02y87mEToUtfBDqt_8-GhPJgIPfkgCK4B/s1600/hive_architecture.jpg

A Metastore egy különálló relációs adatbázis, amely a Hive adattáblák és partíciók leírását tárolja, és a kliensek számára hozzáférést nyújt ezekhez. A Hive két klienst is tartalmaz:

A Hive standard SQL támogatást nyújt, a legtöbb újabb SQL szabvány követésével. A Hive által használt SQL nyelv bővíthető felhasználói programkóddal, ami az alábbiak egyike lehet:

Nincs egy előre definiált "Hive adatformátum", amibe az adatokat tárolnunk kell, e helyett a Hive ún. csatlakozókat (connector) biztosít különböző adatformátumokhoz, pl. vessző/tab elválasztott érték (CSV/TSV) szövegfájlok, Apache Parquet [9], Apache ORC [10], stb. Részletekért lásd a hivatalos dokumentációt [11, 12], illetve a gyakorlathoz tartozó olvasóleckét.

A Hive-ot nem online tranzakciók feldolgozására (OLTP) tervezték, tradicionális batch alapú adatfeldolgozáshoz ideális. Skálázhatóságra, teljesítményre, bővíthetőségre, hibatűrésre és a bemenő adatformátumoktól való függetlenségre tervezték.

Példa Hive használatára

Az alábbi példa azt mutatja, hogyan definiálhatunk egy adattábla struktúrát Hive segítségével, és hogyan kapcsolhatjuk azt hozzá egy HDFS-en lévő adatfájlhoz. Ezután standard SQL lekérdezésekkel hozzáférünk a fájl tartalmához.

Book to read, knowledge, lecture, open book, reading book icon 2. fejezet
Apache Impala

Az Apache Impala [13] az Apache Hive komponenseit felhasználva (metastore, Hive SQL, ODBC driver, felhasználói felület) nyújt SQL alapú MPP (Massive Parallell Processing) interaktív adat lekérdezési lehetőséget HDFS-en vagy HBase-ben tárolt adatokhoz. A Hive-val ellentétben a valós idejű lekérdezéseket is támogatja. A késleltetés kiküszöbölése érdekében az Impala megkerüli a MapReduce-t, hogy az adatokhoz egy saját elosztott motoron keresztül férjen hozzá. Ezáltal egy nagyságrenddel gyorsabb lekérdezéseket tesz lehetővé, mint a Hive (konfigurációtól függően). Jelenleg az Impala a leghatékonyabb SQL motor a HDFS fölött. Az Impala architektúrája [14] a következő ábrán látható.

img

https://impala.apache.org/img/impala.png

Ez a megközelítés számos előnnyel jár a Hadoop adatok másfajta lekérdezéseivel szemben, többek között:

Példa Impala használatára

A következőkben egy példát mutatunk arra hogyan lehet egy CSV fájlt betölteni az Impala rendszerébe, hogy aztán SQL-lel lekérdezhetővé váljanak a benne tárolt adatok:

Book to read, knowledge, lecture, open book, reading book icon 3. fejezet
Apache Drill és Sqoop

Az Apache Drill [15] egy nyílt forrású SQL lekérdező motor BigData feltárásához. A Drill-t az alapoktól kezdve félig-strukturált és gyorsan változó adatok hatékony analízisére tervezték, amilyeneket tipikusan a BigData alkalmazások állítanak elő. Mindezt a jól ismert és standardizált SQL nyelv segítségével. A Drill könnyen integrálható meglévő Hive illetve HBase környezetekkel. A Drill teljesen független a Hadoop-tól és minden egyéb infrastruktúrától, telepítés után tetszőleges lokális fájlon (pl. egy séma nélküli JSON fájl) is használhatjuk. Nincs szükség az adatok sémájának definiálására, amivel az egyetlen ilyen elosztott SQL motor. A MongoDB [16] és Elasticsearch [17] NoSQL adatbázisok által is használt séma nélküli JSON modellt használja. Lehetővé teszi több adatforrás összekapcsolását is, teljes SQL szabvány támogatással rendelkezik.

https://drill.apache.org/docs/img/query-flow-client.png

A Drill elosztott végrehajtási környezet (lásd fenti ábra) lelke az ún. "Drillbit" szolgáltatás, amely fogadja a kliensek felől érkező kéréseket, végrehajtja azokat és visszaküldi az eredményt. A Drillbit szolgáltatás telepíthető pl. egy Hadoop klaszter minden egyes csomópontjára. Ebben az esetben a Drill maximálisan kihasználhatja az adat lokalitást, azaz nem kell az adatokat átmozgatnia a hálózaton. A klaszter menedzsmenthez a ZooKeeper-t [18] használja, amely az egyetlen függősége, egyébként tetszőleges klaszteren képes működni, nem csak Hadoop-on, viszont a YARN-nal is integrálható (így nem kell minden csomópontra külön telepítenünk, a YARN elvégzi a deploy-t). Egy-egy Drillbit belső felépítését a lenti ábra mutatja.

https://drill.apache.org/docs/img/DrillbitModules.png

Példa Drill használatára

Egy lokális JSON fájl lekérdezéséhez egyszerűen le kell tölteni a Dirll csomagot, és a beépített klienssel már futtathatunk is lekérdezéseket. A klaszteren való telepítés részleteiről a következő URL ad bővebb információt: https://drill.apache.org/docs/creating-a-basic-drill-cluster/

Apache Sqoop

Az Apache Sqoop [19] eszköz egy SQL to Hadoop implementáció, azaz lehetővé teszi az adatok relációs adattáblából HDFS-re történő importálását, vagy pedig a HDFS állományok exportálását relációs adattáblába. Egy tipikus ETL eszköz, amely forrása vagy cél tárhelye egy relációs adatbázis illetve egy Hadoop klaszter HDFS fájlrendszere.

https://www.hdfstutorial.com/wp-content/uploads/2016/07/Sqoop-architecture.png

Book to read, knowledge, lecture, open book, reading book icon 4. fejezet
SQL eszközök összehasonlítása

A fentiekben sok hasonló eszközt mutattunk be. Felmerülhet a kérdés, hogy mégis mi a főbb különbség ezen eszközök között, illetve ha lényegében ugyanazt a problémát tudják megoldani, akkor mégis mikor melyiket érdemes használni? Ezek bizony jogos kérdések, ezért ebben a fejezetben összefoglaljuk az egyes eszközök főbb közös vonásait, de leginkább azt, hogy miben térnek el egymástól, mert ez alapján egyértelmű, hogy milyen feladat megoldására melyiket célszerű választani.

Jól látszik, hogy a fenti eszközök bár hasonlók, más-más célokat szolgálnak. Egyedül talán a Hive/Impala eszközöknek van nagy közös metszete, de nem real-time környezetben az előbbi, míg valós idejű, interaktív lekérdezések esetén utóbbi az egyértelmű választás.

Azonban ezzel természetesen nem ér véget az eszközök sora, számos másik olyan megoldás létezik, amelyek az adatok strukturált lekérdezését támogatják:

Check mark icon set. Green OK or V tick, red X, exclamation mark ...Ellenőrző kérdések

  1. Mire szolgál az Apache Hive, milyen fő komponensei vannak?
  2. Mely job végrehajtó motorokat támogatja az Apache Hive?
  3. Hány fajta kliens nyújt a Hive? Mi az alapvető különbség köztük?
  4. Miben különbözik az Apache Impala a Hive-tól?
  5. Egy web-alkalmazásban, ahol a felhasználói kérések alapján közel valós időben kell HDFS adatokban lekérdezést végrehajtanunk, melyik eszközt használnád és miért?
  6. Az olvasóleckében említett eszközök közül melyeket tekinthetjük klasszikus ETL eszköznek?
  7. Mi az Apache Drill fő erőssége? Milyen típusú adatokon dolgozik?
  8. Milyen nyelvet ad a kezünkbe a Hadoop adatok lekérdezéséhez az Apache Pig?

Referenciák

[1] https://hive.apache.org/

[2] https://cwiki.apache.org/confluence/display/Hive/Home

[3] http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

[4] http://spark.apache.org/

[5] http://tez.apache.org/

[6] https://cwiki.apache.org/confluence/display/Hive/LLAP

[7] https://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html

[8] https://slider.incubator.apache.org/

[9] http://parquet.apache.org/

[10] http://orc.apache.org/

[11] https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-FileFormats

[12] https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide

[13] https://impala.apache.org/overview.html

[14] http://cidrdb.org/cidr2015/Papers/CIDR15_Paper28.pdf

[15] https://drill.apache.org/

[16] https://www.mongodb.com/

[17] https://www.elastic.co/

[18] https://zookeeper.apache.org/

[19] https://sqoop.apache.org/