A legjobb válasz
Bármely lehetséges referenciaértékben a Spark Sql sokkal gyorsabb, mint a Hive. Bár a Facebook előállt a Presto-val – a Spark tervezésének olcsó példányával, amely a kaptár kapucnija alá került, és a kaptárnak van egy újabb verziója is a Tez-en – amelynek DAG-okkal való tévedése itt jól dokumentálva van A Tez tragédiája , de az összes SQL-hez kapcsolódó feladatban (pl. Térképoldali sqls => szűrő, adatmutáció vagy oldalsó Sqls csökkentése => Rendezés / összesítés / Ablak funkciók) a Spark még mindig ragyogóan világít.
Mivel a kérdés nem felteszi a “Miért” kérdést, nem foglalkoznék sokat e technikai részletekkel. Csak azért, hogy legyen értelme, gondoljon egy elosztott adatfeldolgozási modellre, ahol az egyes feladatoknak a teljes befejezés előtt egy teljes (replikációval ellátott) adatkészletet kell megírniuk, ahol az alkalmazás nem képes önállóan felmérni az erőforrás-felhasználást, és hol van az alkalmazás a fürtkezelő irgalma a feladat / a végrehajtás szakaszának elindításában, és hasonlítsa össze ezt egy másik elosztott adatfeldolgozási modellel, ahol a feladatok a legtöbbször a memóriában élhetnek, ahol az erőforrást intelligensen tudja elosztani a motor, és ahol a keretrendszer ülhet a fürtkezelő tetején, és a fürtkezelőtől semmiért nem függ – kivéve a konténer kiosztást (és egy kis De / Serializálást, amely akár meg is kerülhető)
(és röviden megfogalmazva, nem még említsd meg a Spark 1.6 / 2.x-et, amely fokozza a játékot a Tungsten vagy a simd implementációval a lekérdezés optimalizálásához).
Szerinted melyik modell nyerné meg a késési csatát?
Válasz
Kezdjük a lekérdezéssel : A Hive megvalósítja az SQL – a Hive Language ( LanguageManual – Apache Hive – Apache Software Foundation ) egy részhalmazát, amely a Hive és Hadoop képességeire jellemző. A beküldött lekérdezést darabokra, predikátumokra bontja, amelyek megvalósíthatók a műveletekben vagy szakaszokban. A SELECT col1 , col2 ,… coln határozza meg, hogy az egyes visszaküldött sorok mely oszlopait őrizzék meg és adják vissza a megoldáskészletben. Hasonlóképpen, a BAL vagy JOBB csatlakozást egy adott állapotban valósítanák meg, valószínűleg Map-Reduce (M\_R) szakaszban. Miután a lekérdezést szétválasztotta az egyes műveleteknek megfelelő darabokra, a Költségalapú optimalizáló (CBO) összegyűjtött és tárolt statisztikákat használ intelligens döntések meghozatalához az egyes szakaszok végrehajtásáról. Például egy WHERE klauzula megvalósítható tábla vizsgálatként, ha nem túl specifikus (alacsony kardinalitás), vagy ha egy tábla nincs particionálva, vagy partíciók megszüntetését eredményezheti, ha a táblát particionálják, és a WHERE záradék partíció oszlopokat határoz meg nagy specifitással. Ha egy lekérdezés több összekapcsolást határoz meg, akkor mindegyik összekapcsolás Map-Reduce szakaszként valósul meg. Ha az egyik csatlakozási tábla nagyon kicsi, akkor a CBO kiválaszthatja a Map-Join végrehajtásra a jobb teljesítmény érdekében.
Amint a CBO lefekteti a végrehajtási tervet, a szakaszokat ütemezik és végrehajtják, általában mint több MR szakasz. Megvizsgálhatja azt a végrehajtási tervet, amelyet a CBO használna az adott lekérdezés végrehajtásához, ha egy EXPLAIN-t futtat a lekérdezésen.
Volt olyan ügyfelem a videoiparban, amely statisztikákat gyűjtött a felhasználók megtekintési szokásairól. Ezeket a statisztikákat egy nagyon nagy táblázatba (100 TiB-be) gyűjtötték össze, amelyet az ügyfél kívánt, és hozzávetőlegesen 20 viszonylag kicsi táblázattal összekötöttek, amelyek az egyes videókról, a videó szereplőiről, az egyes videók cselekményéről, a produkcióról stb. Létrehoztam olyan nézeteket, amelyek egymás után csatlakoztak a kisebb táblákhoz, amelyeket végül összekötöttek a megtekintési táblázattal egy eredmény nézethez, amelyet aztán egy output táblába írtak. Amikor beküldtem egy egyszerű lekérdezést, hogy kiválaszthassak az eredménynézetből a kimeneti táblába (CREATE TABLE output (…) AS SELECT * FROM results\_view), a Hive létrehozott egy 25 lépcsős lekérdezést, amely az összes közbenső nézetet megvalósította a végső nézetben, majd megírta a kimeneti táblához. Mivel minden szakasz M-R feladat volt (YARN esetében), és az M-R feladat telepítési ideje nagyjából 30 másodperc volt az adott fürt számára, az M-R telepítési idejében körülbelül 12–14 percet töltöttek el. Az M-R szakaszok többsége kevesebb, mint 45 másodperc alatt végrehajtott, ennek 2/3-a az M-R telepítési ideje és a tényleges végrehajtás 1/3-a. A kisebb táblázatok végleges térképi összekapcsolása a nézői statisztikai táblázattal további 20 percet vett igénybe. Egy halom nézet létrehozása, amelyeket egymás után egyesítettek egy eredménytáblával, lehetővé tette számomra, hogy létrehozzak egy folyamatot, amelyet viszonylag egyszerű lekérdezésekből állítottam össze, ahelyett, hogy megpróbáltam volna létrehozni egy hatalmas lekérdezést, amely megpróbálna 20+ táblát összekapcsolni egy lekérdezésben.