Apache Hive vs Apache Impala: Stora skillnader

By rik

Om du är ny inom området big data-analys kan det stora utbudet av Apache-verktyg verka överväldigande. De olika alternativen kan vara förvirrande, och det är lätt att känna sig osäker på vilket verktyg som passar bäst.

Den här artikeln syftar till att klargöra detta genom att förklara vad Apache Hive och Impala är, samt vilka huvudsakliga skillnader som finns mellan dem.

Apache Hive

Apache Hive fungerar som ett SQL-baserat gränssnitt för att hantera data på Apache Hadoop-plattformen. Genom att använda Hive kan du ställa frågor, aggregera och analysera data med hjälp av SQL-liknande syntax.

Ett schema tillämpas vid läsning av data som finns i HDFS-filsystemet, vilket möjliggör att data behandlas som om det vore en vanlig tabell eller en relationsdatabas. HiveQL-frågor omvandlas till Java-kod för att sedan köras som MapReduce-jobb.

Frågor i Hive skrivs med hjälp av HiveQL, ett frågespråk som är baserat på SQL, men som inte fullt ut stöder SQL-92-standarden.

Detta språk erbjuder emellertid programmerare möjligheten att använda egna funktioner när de standardiserade funktionerna i HiveQL är otillräckliga. HiveQL kan utökas med användardefinierade funktioner (UDF) för skalära värden, aggregering (UDAF) och tabellfunktioner (UDTF).

Hur fungerar Apache Hive

Apache Hive översätter program som är skrivna i HiveQL (som liknar SQL) till en eller flera uppgifter för MapReduce, Apache Tez eller Apache Spark. Dessa tre är motorer som kan köras på Hadoop. Apache Hive ordnar sedan data i en struktur för Hadoop Distributed File System (HDFS) för att köra jobben i ett kluster och producera ett resultat.

Apache Hive-tabeller påminner om relationsdatabaser, och datat ordnas hierarkiskt från det mest övergripande till det mest detaljerade. Databaser är samlingar av partitioner, som i sin tur kan delas in i ”buckets”.

Data är tillgänglig via HiveQL. Inom varje databas är data numrerad och varje tabell motsvarar en katalog i HDFS.

Det finns flera sätt att interagera med Apache Hive, inklusive webbgränssnitt, CLI (kommandoradsgränssnitt) eller via externa klienter.

Apache Hive Thrift-servern tillåter klienter att skicka kommandon och förfrågningar till Apache Hive med hjälp av olika programmeringsspråk. Den centrala katalogen i Apache Hive är en ”metastore” som innehåller all relevant information.

Motorn som driver Hive kallas för ”drivrutin”. Den innehåller en kompilator och en optimerare som används för att bestämma den bästa exekveringsplanen.

Säkerheten i Hive tillhandahålls av Hadoop, som använder Kerberos för att autentisera klienter och servrar. Rättigheter för nyskapade filer i Apache Hive hanteras av HDFS, vilket ger möjlighet till användar-, grupp- eller annan auktorisering.

Funktioner i Hive

  • Stöder beräkningsmotorer för både Hadoop och Spark.
  • Använder HDFS och fungerar som datalager.
  • Använder MapReduce och stöder ETL-processer.
  • Har felhantering liknande Hadoop, tack vare HDFS.

Apache Hive: Fördelar

Apache Hive är en idealisk lösning för databaserade frågor och analys. Det möjliggör kvalitativa insikter, ger konkurrensfördelar och hjälper till att snabbt anpassa sig till marknadens efterfrågan.

Bland de främsta fördelarna med Apache Hive är dess användarvänlighet, tack vare det SQL-liknande språket. Dessutom snabbas den initiala datainläsningen upp eftersom data inte behöver läsas eller numreras från en disk till ett internt databasformat.

Eftersom data lagras i HDFS, kan Apache Hive hantera mycket stora datamängder, upp till hundratals petabyte. Denna lösning är mycket mer skalbar än en traditionell databas. Eftersom det är en molntjänst tillåter Apache Hive användare att snabbt starta virtuella servrar baserat på variationer i arbetsbelastningen.

Säkerhet är också ett starkt kort för Hive, med dess förmåga att replikera kritiska arbetsbelastningar om problem uppstår. Slutligen är arbetskapaciteten imponerande eftersom den kan utföra upp till 100 000 förfrågningar per timme.

Apache Impala

Apache Impala är en massivt parallell SQL-frågemotor för interaktiv exekvering av SQL-frågor på data som lagras i Apache Hadoop. Den är skriven i C++ och distribueras under Apache 2.0-licensen.

Impala klassas även som en MPP-motor (Massively Parallel Processing), en distribuerad DBMS och till och med en SQL-on-Hadoop stackdatabas.

Impala fungerar i ett distribuerat läge där processinstanser körs på olika klusternoder, tar emot, schemalägger och koordinerar klientförfrågningar. Detta möjliggör parallell exekvering av delar av en SQL-fråga.

Klienter är användare och applikationer som skickar SQL-frågor mot data som finns i Apache Hadoop (HBase och HDFS) eller Amazon S3. Interaktionen med Impala sker via webbgränssnittet HUE (Hadoop User Experience), ODBC, JDBC och Impala Shells kommandoradsskal.

Impala är beroende av Apache Hive, ett annat populärt SQL-on-Hadoop-verktyg, och använder dess metadatalager. Hive Metastore gör det möjligt för Impala att känna till tillgängligheten och strukturen hos databaserna.

När du skapar, ändrar eller tar bort schemaobjekt eller läser in data till tabeller via SQL-satser, sprids motsvarande metadataändringar automatiskt till alla Impala-noder med hjälp av en dedikerad katalogtjänst.

De huvudsakliga komponenterna i Impala är följande körbara filer:

  • Impalad eller Impala daemon är en systemtjänst som schemalägger och kör frågor på data i HDFS, HBase och Amazon S3. En impaladprocess körs på varje nod i klustret.
  • Statestore är en namntjänst som håller reda på placeringen och statusen för alla impaladinstanser i klustret. En instans av denna systemtjänst körs på varje nod samt på huvudservern (Name Node).
  • Catalog är en tjänst för metadatahantering som sprider ändringar från Impala DDL- och DML-satser till alla berörda Impala-noder, så att nya tabeller eller data omedelbart blir synliga för alla noder i klustret. Det rekommenderas att en instans av Catalog körs på samma klustervärd som Statestore-demonen.

Hur fungerar Apache Impala

Impala använder, precis som Apache Hive, ett deklarativt frågespråk som kallas Hive Query Language (HiveQL), som är en delmängd av SQL92, istället för SQL.

Själva utförandet av en begäran i Impala går till på följande sätt:

En klientapplikation skickar en SQL-fråga genom att ansluta till valfri impalad via standardiserade ODBC- eller JDBC-drivrutinsgränssnitt. Den anslutna impalad-instansen blir koordinator för den aktuella begäran.

SQL-frågan analyseras för att bestämma uppgifterna för impalad-instanserna i klustret. Därefter skapas en optimerad plan för frågeexekvering.

Impalad får direkt tillgång till HDFS och HBase med hjälp av lokala instanser av systemtjänster för att leverera data. Till skillnad från Apache Hive, sparar en sådan direkt interaktion betydande tid vid exekvering av frågor, eftersom mellanresultat inte sparas.

Varje demon returnerar data till den koordinerande impalad-instansen, som sedan skickar resultatet tillbaka till klienten.

Funktioner hos Impala

  • Stöd för realtidsbearbetning i minnet.
  • SQL-vänligt gränssnitt.
  • Stöd för lagringssystem som HDFS, Apache HBase och Amazon S3.
  • Stöd för integration med BI-verktyg som Pentaho och Tableau.
  • Använder HiveQL-syntax.

Apache Impala: Fördelar

Impala undviker onödig overhead eftersom alla systemdemonprocesser startas direkt vid uppstart. Detta sparar betydligt med tid vid exekvering av frågor. En ytterligare hastighetsökning i Impala beror på att detta SQL-verktyg för Hadoop, till skillnad från Hive, inte sparar mellanresultat och har direkt tillgång till HDFS eller HBase.

Dessutom genererar Impala programkod vid körning och inte vid kompilering, som Hive gör. En nackdel med Impalas höga hastighet är dock den minskade tillförlitligheten.

Om en datanod kraschar under utförandet av en SQL-fråga kommer Impala-instansen att starta om. Hive, å andra sidan, kommer att fortsätta att behålla anslutningen till datakällan, vilket ger bättre feltolerans.

Andra fördelar med Impala inkluderar inbyggt stöd för Kerberos, ett säkert nätverksautentiseringsprotokoll, prioriteringsmöjligheter, stöd för köhantering av förfrågningar och stöd för populära Big Data-format som LZO, Avro, RCFile, Parquet och Sequence.

Hive vs Impala: Likheter

Både Hive och Impala distribueras under Apache Software Foundation-licensen och är SQL-verktyg för att arbeta med data som lagras i ett Hadoop-kluster. De använder också det distribuerade filsystemet HDFS.

Impala och Hive hanterar olika uppgifter, men fokuserar båda på SQL-bearbetning av stora datamängder i ett Apache Hadoop-kluster. Impala har ett SQL-liknande gränssnitt som gör det möjligt att läsa och skriva Hive-tabeller, vilket underlättar datautbyte.

Impala gör SQL-operationer på Hadoop ganska snabba och effektiva, vilket gör det till ett bra val för Big Data-analysprojekt. När det är möjligt, utnyttjar Impala en befintlig Apache Hive-infrastruktur som redan används för att köra långvariga SQL-batchfrågor.

Impala lagrar också sina tabelldefinitioner i en metastore, en traditionell MySQL- eller PostgreSQL-databas, vilket är samma plats som Hive lagrar liknande data. Detta gör det möjligt för Impala att komma åt Hive-tabeller så länge som alla kolumner använder de datatyper, filformat och komprimeringscodec som Impala stöder.

Hive vs Impala: Skillnader

Programmeringsspråk

Hive är skrivet i Java, medan Impala är skrivet i C++. Impala kan dock även använda vissa Java-baserade Hive UDF:er.

Användningsområden

Dataingenjörer använder Hive i ETL-processer (Extract, Transform, Load), till exempel för långvariga batchjobb på stora datamängder. Det kan till exempel vara i system för reseaggregering eller flygplatsinformation. Impala, å andra sidan, är främst avsedd för analytiker och datavetare och används oftast för business intelligence-uppgifter.

Prestanda

Impala utför SQL-frågor i realtid, medan Hive kännetecknas av en lägre hastighet för databearbetning. Med enkla SQL-frågor kan Impala vara 6-69 gånger snabbare än Hive. Hive hanterar dock komplexa frågor bättre.

Latens/genomströmning

Genomströmningen i Hive är betydligt högre än i Impala. Funktionen LLAP (Live Long and Process), som möjliggör frågecachning i minnet, ger Hive bra prestanda på låg nivå.

LLAP inkluderar långvariga systemtjänster (demoner), som gör det möjligt att interagera direkt med HDFS-datanoder och ersätta den tätt integrerade DAG-frågestrukturen (Directed acyclic graph) – en grafmodell som ofta används i Big Data-beräkningar.

Feltolerans

Hive är ett feltåligt system som sparar alla mellanresultat. Detta har en positiv inverkan på skalbarheten, men leder till en minskning av databearbetningshastigheten. Impala är inte lika feltolerant eftersom den är mer minnesbunden.

Kodkonvertering

Hive genererar frågeuttryck vid kompilering, medan Impala genererar dem vid körning. Hive kan ha ett ”kallstartsproblem” första gången applikationen startas. Frågorna omvandlas då långsamt på grund av behovet av att etablera en anslutning till datakällan.

Impala har inte den här typen av startkostnad. De nödvändiga systemtjänsterna (demoner) för att bearbeta SQL-frågor startas vid uppstart, vilket påskyndar arbetet.

Stöd för lagring

Impala stöder formaten LZO, Avro och Parquet, medan Hive arbetar med vanlig text och ORC. Båda stöder dock formaten RCFile och Sequence.

Apache Hive Apache Impala
Språk Java C++
Användningsområden Data Engineering Analys och rapportering
Prestanda Hög för enkla frågor Jämförelsevis låg
Latens Mer latens på grund av caching Mindre latens
Feltolerans Mer tolerant på grund av MapReduce Mindre tolerant på grund av MPP
Kodgenerering Generering vid kompilering Generering vid körning

Slutord

Hive och Impala konkurrerar inte med varandra, utan kompletterar varandra effektivt. Trots att det finns betydande skillnader mellan de två, finns det också en hel del gemensamt. Valet mellan dem beror på datatypen och de specifika kraven i projektet.

Du kan också undersöka direkta jämförelser mellan Hadoop och Spark.

.