Sollten Sie sich neu in der Welt der Big-Data-Analyse bewegen, sind Ihnen sicherlich die zahlreichen Apache-Werkzeuge aufgefallen. Die schiere Anzahl unterschiedlicher Tools kann jedoch verwirrend und mitunter überwältigend sein.
Dieser Artikel soll Klarheit schaffen und erläutern, was Apache Hive und Impala sind und wie sie sich voneinander unterscheiden!
Apache Hive
Apache Hive ist eine SQL-basierte Schnittstelle für den Datenzugriff auf der Apache Hadoop-Plattform. Mit Hive können Sie Daten mithilfe von SQL-Syntax abfragen, aggregieren und analysieren.
Es wird ein „Schema-on-Read“-Ansatz für Daten im HDFS-Dateisystem verwendet, was bedeutet, dass Sie Daten wie in einer herkömmlichen Tabelle oder einem relationalen Datenbankmanagementsystem (DBMS) behandeln können. HiveQL-Abfragen werden in MapReduce-Jobs in Java-Code umgewandelt.
Hive-Abfragen werden in der Abfragesprache HiveQL verfasst, die auf SQL basiert, den SQL-92-Standard jedoch nicht vollständig unterstützt.
Diese Sprache ermöglicht es Programmierern, ihre eigenen Abfragen zu verwenden, wenn es unpraktisch oder ineffizient ist, die HiveQL-Funktionen zu nutzen. HiveQL kann durch benutzerdefinierte Skalarfunktionen (UDFs), Aggregationen (UDAFs) und Tabellenfunktionen (UDTFs) erweitert werden.
Wie funktioniert Apache Hive?
Apache Hive transformiert in HiveQL geschriebene Programme (ähnlich SQL) in eine oder mehrere MapReduce-, Apache Tez- oder Apache Spark-Aufgaben. Dies sind drei Ausführungs-Engines, die auf Hadoop gestartet werden können. Apache Hive organisiert dann die Daten in einem Array für das Hadoop Distributed File System (HDFS), um die Jobs auf einem Cluster auszuführen und ein Ergebnis zu liefern.
Apache Hive-Tabellen ähneln relationalen Datenbanken, wobei Dateneinheiten von der wichtigsten bis zur granularsten Einheit strukturiert sind. Datenbanken bestehen aus Partitionen, die wiederum in „Buckets“ unterteilt sein können.
Daten werden über HiveQL abgerufen. Innerhalb jeder Datenbank sind die Daten organisiert, und jede Tabelle entspricht einem HDFS-Verzeichnis.
Innerhalb der Apache Hive-Architektur gibt es mehrere Schnittstellen, darunter eine Webschnittstelle, eine Kommandozeilenschnittstelle (CLI) oder externe Clients.
Der „Apache Hive Thrift“-Server erlaubt es entfernten Clients, Befehle und Anfragen mithilfe verschiedener Programmiersprachen an Apache Hive zu senden. Das zentrale Verzeichnis von Apache Hive ist ein „Metastore“, der alle relevanten Informationen enthält.
Die Komponente, die Hive antreibt, wird als „Treiber“ bezeichnet. Er umfasst einen Compiler und einen Optimierer, um den idealen Ausführungsplan zu ermitteln.
Für die Sicherheit ist Hadoop zuständig, das auf Kerberos für die gegenseitige Authentifizierung zwischen Client und Server setzt. Die Berechtigungen für neu erstellte Dateien in Apache Hive werden von HDFS verwaltet und ermöglichen Benutzer-, Gruppen- oder anderweitige Autorisierungen.
Funktionen von Hive
- Unterstützt die Rechen-Engines von Hadoop und Spark
- Nutzt HDFS und fungiert als Data Warehouse
- Verwendet MapReduce und unterstützt ETL-Prozesse
- Bietet dank HDFS eine ähnliche Fehlertoleranz wie Hadoop
Apache Hive: Vorteile
Apache Hive ist eine ideale Lösung für Abfragen und Datenanalysen. Es liefert wertvolle Erkenntnisse, verschafft einen Wettbewerbsvorteil und erleichtert die Anpassung an die Marktnachfrage.
Zu den wichtigsten Vorteilen von Apache Hive gehört die Benutzerfreundlichkeit durch seine „SQL-freundliche“ Sprache. Zudem beschleunigt es das anfängliche Einspielen von Daten, da die Daten nicht von der Festplatte in ein internes Datenbankformat eingelesen oder indiziert werden müssen.
Da die Daten in HDFS gespeichert sind, ist es möglich, sehr große Datensätze mit bis zu Hunderten von Petabytes an Daten in Apache Hive zu speichern. Diese Lösung ist wesentlich skalierbarer als eine herkömmliche Datenbank. Als Cloud-Dienst ermöglicht Apache Hive den Nutzern, virtuelle Server je nach Schwankungen der Arbeitslast (z. B. Aufgaben) schnell zu starten.
Auch im Bereich Sicherheit punktet Hive mit der Möglichkeit, kritische Workloads im Fehlerfall zu replizieren. Schließlich ist die Arbeitskapazität beachtlich und kann bis zu 100.000 Anfragen pro Stunde bearbeiten.
Apache Impala
Apache Impala ist eine massiv parallele SQL-Abfrage-Engine für die interaktive Ausführung von SQL-Abfragen auf in Apache Hadoop gespeicherten Daten. Sie ist in C++ geschrieben und unter der Apache 2.0-Lizenz verfügbar.
Impala wird auch als MPP-Engine (Massively Parallel Processing), als verteiltes DBMS und als SQL-on-Hadoop-Stack-Datenbank bezeichnet.
Impala arbeitet im verteilten Modus, wobei Prozessinstanzen auf verschiedenen Clusterknoten laufen und Clientanfragen empfangen, planen und koordinieren. Dies ermöglicht die parallele Ausführung von SQL-Abfragefragmenten.
Clients sind Benutzer und Anwendungen, die SQL-Abfragen an Daten senden, die in Apache Hadoop (HBase und HDFS) oder Amazon S3 gespeichert sind. Die Interaktion mit Impala erfolgt über die Webschnittstelle HUE (Hadoop User Experience), ODBC, JDBC und die Befehlszeilen-Shell Impala Shell.
Impala ist infrastrukturell von einem anderen beliebten SQL-on-Hadoop-Tool, Apache Hive, abhängig, da es dessen Metadatenspeicher verwendet. Konkret informiert der Hive Metastore Impala über die Verfügbarkeit und Struktur der Datenbanken.
Wenn Schemaobjekte über SQL-Anweisungen erstellt, geändert oder gelöscht werden oder Daten in Tabellen geladen werden, werden die entsprechenden Metadatenänderungen automatisch mithilfe eines speziellen Verzeichnisdienstes an alle Impala-Knoten weitergegeben.
Die Schlüsselkomponenten von Impala sind die folgenden ausführbaren Dateien:
- Impalad oder Impala-Daemon ist ein Systemdienst, der Abfragen für HDFS-, HBase- und Amazon S3-Daten plant und ausführt. Auf jedem Clusterknoten läuft ein Impalad-Prozess.
- Statestore ist ein Namensdienst, der den Standort und den Status aller Impalad-Instanzen im Cluster verfolgt. Auf jedem Knoten und dem Hauptserver (Name Node) läuft eine Instanz dieses Systemdienstes.
- Catalog ist ein Metadatenkoordinationsdienst, der Änderungen von Impala DDL- und DML-Anweisungen an alle betroffenen Impala-Knoten weiterleitet, sodass neue Tabellen oder neu geladene Daten für jeden Knoten im Cluster sofort sichtbar sind. Es wird empfohlen, dass eine Catalog-Instanz auf demselben Cluster-Host wie der Statestored-Daemon ausgeführt wird.
Wie funktioniert Apache Impala?
Impala verwendet, wie Apache Hive, anstelle von SQL eine ähnliche deklarative Abfragesprache, die Hive Query Language (HiveQL), die eine Teilmenge von SQL92 ist.
Die eigentliche Ausführung einer Anfrage in Impala läuft folgendermaßen ab:
Die Client-Anwendung sendet eine SQL-Abfrage, indem sie sich über standardisierte ODBC- oder JDBC-Treiberschnittstellen mit einem Impalad verbindet. Das verbundene Impalad wird zum Koordinator der aktuellen Anfrage.
Die SQL-Abfrage wird analysiert, um die Aufgaben für die Impalad-Instanzen im Cluster zu bestimmen. Anschließend wird der optimale Abfrageausführungsplan erstellt.
Impalad greift direkt auf HDFS und HBase zu, indem lokale Instanzen von Systemdiensten genutzt werden, um Daten bereitzustellen. Im Gegensatz zu Apache Hive spart diese direkte Interaktion erheblich Zeit bei der Abfrageausführung, da keine Zwischenergebnisse gespeichert werden.
Als Antwort sendet jeder Daemon Daten an das koordinierende Impalad zurück und leitet die Ergebnisse an den Client weiter.
Eigenschaften von Impala
- Unterstützung für Echtzeit-In-Memory-Verarbeitung
- SQL-freundlich
- Unterstützt Speichersysteme wie HDFS, Apache HBase und Amazon S3
- Unterstützt die Integration mit BI-Tools wie Pentaho und Tableau
- Verwendet die HiveQL-Syntax
Apache Impala: Vorteile
Impala vermeidet den potenziellen Start-Overhead, da alle System-Daemon-Prozesse direkt beim Booten gestartet werden. Es spart erheblich Zeit bei der Abfrageausführung. Eine zusätzliche Steigerung der Geschwindigkeit von Impala resultiert daraus, dass dieses SQL-Tool für Hadoop, im Gegensatz zu Hive, keine Zwischenergebnisse speichert und direkt auf HDFS oder HBase zugreift.
Darüber hinaus generiert Impala Programmcode zur Laufzeit und nicht, wie Hive, zur Kompilierzeit. Ein Nebeneffekt der hohen Geschwindigkeit von Impala ist jedoch die geringere Zuverlässigkeit.
Wenn ein Datenknoten während der Ausführung einer SQL-Abfrage ausfällt, wird die Impala-Instanz neu gestartet, während Hive weiterhin eine Verbindung zur Datenquelle aufrechterhält, wodurch Fehlertoleranz geboten wird.
Weitere Vorteile von Impala sind die integrierte Unterstützung für das sichere Netzwerkauthentifizierungsprotokoll Kerberos, die Priorisierung und die Möglichkeit, die Warteschlange von Anfragen zu verwalten, sowie die Unterstützung gängiger Big-Data-Formate wie LZO, Avro, RCFile, Parquet und Sequence.
Hive vs Impala: Ähnlichkeiten
Hive und Impala werden unter der Lizenz der Apache Software Foundation kostenlos verteilt und sind SQL-Tools für die Arbeit mit Daten, die in einem Hadoop-Cluster gespeichert sind. Darüber hinaus verwenden beide das verteilte HDFS-Dateisystem.
Impala und Hive implementieren unterschiedliche Aufgaben, haben aber einen gemeinsamen Fokus auf der SQL-Verarbeitung von Big Data, die in einem Apache Hadoop-Cluster gespeichert sind. Impala bietet eine SQL-ähnliche Schnittstelle, mit der man Hive-Tabellen lesen und schreiben kann, wodurch ein einfacher Datenaustausch ermöglicht wird.
Gleichzeitig macht Impala SQL-Operationen auf Hadoop recht schnell und effizient, was die Nutzung dieses DBMS in Big-Data-Analyseforschungsprojekten ermöglicht. Wann immer möglich, arbeitet Impala mit einer bestehenden Apache Hive-Infrastruktur, die bereits für die Ausführung von langlaufenden SQL-Batch-Abfragen genutzt wird.
Außerdem speichert Impala seine Tabellendefinitionen in einem Metastore, einer herkömmlichen MySQL- oder PostgreSQL-Datenbank, also am gleichen Ort, an dem Hive ähnliche Daten speichert. Dies ermöglicht Impala den Zugriff auf Hive-Tabellen, solange alle Spalten die von Impala unterstützten Datentypen, Dateiformate und Komprimierungscodecs verwenden.
Hive vs Impala: Unterschiede
Programmiersprache
Hive ist in Java geschrieben, während Impala in C++ geschrieben ist. Allerdings verwendet Impala auch einige Java-basierte Hive-UDFs.
Anwendungsfälle
Data Engineers nutzen Hive beispielsweise in ETL-Prozessen (Extract, Transform, Load) für lang andauernde Batch-Jobs auf großen Datensätzen, z.B. in Reiseaggregatoren und Flughafeninformationssystemen. Impala hingegen ist hauptsächlich für Analysten und Datenwissenschaftler gedacht und wird vorwiegend in Aufgaben wie Business Intelligence eingesetzt.
Leistung
Impala führt SQL-Abfragen in Echtzeit aus, während Hive durch eine geringere Datenverarbeitungsgeschwindigkeit charakterisiert ist. Mit einfachen SQL-Abfragen kann Impala 6-69 Mal schneller laufen als Hive. Hive verarbeitet komplexe Abfragen jedoch besser.
Latenz/Durchsatz
Der Durchsatz von Hive ist deutlich höher als der von Impala. Die LLAP-Funktion (Live Long and Process), die das Zwischenspeichern von Abfragen im Speicher ermöglicht, verschafft Hive eine gute Performance auf niedriger Ebene.
LLAP umfasst langfristige Systemdienste (Daemons), die es erlauben, direkt mit HDFS-Datenknoten zu interagieren und die eng integrierte DAG-Abfragestruktur (Directed Acyclic Graph) zu ersetzen – ein Graphmodell, das aktiv beim Big-Data-Computing verwendet wird.
Fehlertoleranz
Hive ist ein fehlertolerantes System, das alle Zwischenergebnisse speichert. Dies wirkt sich auch positiv auf die Skalierbarkeit aus, führt jedoch zu einer Reduzierung der Datenverarbeitungsgeschwindigkeit. Impala hingegen kann nicht als fehlertolerante Plattform bezeichnet werden, da es stärker speichergebunden ist.
Codeumwandlung
Hive generiert Abfrageausdrücke zur Kompilierzeit, während Impala sie zur Laufzeit generiert. Hive ist beim ersten Start der Anwendung durch ein „Kaltstart“-Problem gekennzeichnet; Abfragen werden langsam konvertiert, da eine Verbindung zur Datenquelle hergestellt werden muss.
Impala hat diese Art von Startaufwand nicht. Die notwendigen Systemdienste (Daemons) zur Verarbeitung von SQL-Anfragen werden beim Booten gestartet, was die Arbeit beschleunigt.
Speicherunterstützung
Impala unterstützt LZO-, Avro- und Parquet-Formate, während Hive mit Plain Text und ORC arbeitet. Beide unterstützen jedoch die Formate RCFIle und Sequence.
Apache Hive | Apache Impala | |
Programmiersprache | Java | C++ |
Anwendungsfälle | Data Engineering | Analyse und Analytik |
Leistung | Hohe für einfache Abfragen | Vergleichsweise geringe Latenz |
Latenz | Höhere Latenz durch Caching | Weniger latenz |
Fehlertoleranz | Toleranter durch MapReduce | Weniger tolerant durch MPP |
Codeumwandlung | Langsam durch Kaltstart | Schnellere Konvertierung |
Speicherunterstützung | Plain Text und ORC | LZO, Avro, Parquet |
Abschließende Worte
Hive und Impala konkurrieren nicht, sondern ergänzen sich effektiv. Obwohl es erhebliche Unterschiede zwischen den beiden gibt, gibt es auch viele Gemeinsamkeiten. Die Wahl des einen oder anderen hängt von den Daten und den spezifischen Anforderungen des jeweiligen Projekts ab.
Sie können auch einen direkten Vergleich zwischen Hadoop und Spark anstellen.
.