Was ist Hive? Architektur & Modi
โก Intelligente Zusammenfassung
Hive ist die SQL-Schicht des Hadoop-รkosystems und wandelt HiveQL-Anweisungen in verteilte Jobs um, die bereits auf HDFS vorhandene strukturierte Daten lesen, sodass Analysten Petabyte-Tabellen abfragen kรถnnen, ohne selbst MapReduce-Code schreiben zu mรผssen.

Was ist Hive?
Hive ist ein ETL- und Data-Warehousing-Tool, das auf dem Hadoop Distributed File System (HDFS) basiert. Hive vereinfacht Operationen wie beispielsweise
- Datenverkapselung
- Ad-hoc-Abfragen
- Analyse groรer Datensรคtze
Wichtige Eigenschaften von Hive
Die folgenden Punkte erlรคutern, was Hive von einem einfachen MapReduce-Programm unterscheidet.
- In Hive werden zunรคchst Tabellen und Datenbanken erstellt und dann werden Daten in diese Tabellen geladen.
- Hive ist ein Data Warehouse, das ausschlieรlich fรผr die Verwaltung und Abfrage strukturierter Daten konzipiert ist, die in Tabellen gespeichert sind.
- MapReduce bietet bei der Verarbeitung strukturierter Daten keine Optimierungs- und Benutzerfreundlichkeitsfunktionen wie UDFs, das Hive-Framework hingegen schon. Query-Optimierung bezeichnet eine effiziente Abfrageausfรผhrung im Hinblick auf die Performance.
- Die SQL-inspirierte Sprache von Hive entlastet den Benutzer von der Komplexitรคt der MapReduce-Programmierung. Sie verwendet vertraute Konzepte aus der Welt der relationalen Datenbanken, wie Tabellen, Zeilen, Spalten und Schemata, um das Erlernen zu vereinfachen.
- Hadoop arbeitet mit flachen Dateien. Daher kann Hive Verzeichnisstrukturen verwenden, um โTeilungโ Daten zur Verbesserung der Leistung bei bestimmten Abfragen.
- Ein wichtiger Bestandteil von Hive ist der Metastore, der zur Speicherung von Schemainformationen dient. Dieser Metastore befindet sich typischerweise in einer relationalen Datenbank. Wir kรถnnen mit Hive รผber Methoden wie die folgenden interagieren:
- Web-GUI
- Java Datenbankkonnektivitรคtsschnittstelle (JDBC)
- Die meisten Interaktionen erfolgen in der Regel รผber eine Befehlszeilenschnittstelle (CLI). Hive bietet eine CLI zum Schreiben von Hive-Abfragen mithilfe der Hive Query Language (HQL).
- Im Allgemeinen รคhnelt die HQL-Syntax der SQL Syntax, mit der die meisten Datenanalysten vertraut sind. Die folgende Beispielabfrage zeigt alle Datensรคtze der genannten Tabelle an.
- Beispielabfrage : Wรคhlen aus
- Hive unterstรผtzt vier Dateiformate, nรคmlich: TEXTFILE, SEQUENCEFILE, ORC und RCFILE (Spaltendatei aufzeichnen).
- Fรผr die Metadatenspeicherung durch Einzelbenutzer verwendet Hive die Derby-Datenbank, und fรผr Metadaten durch mehrere Benutzer oder gemeinsam genutzte Benutzer verwendet Hive die Derby-Datenbank. MySQL.
Zum Aufstellen MySQL als Datenbank und zum Speichern von Metadateninformationen, siehe das Tutorial auf Konfiguration des Hive-Metastores mit MySQL, was sich an die Installationsanleitung fรผr Bienenstรถcke.
Einige der wichtigsten Punkte zu Hive:
- Der Hauptunterschied zwischen HQL und SQL besteht darin, dass eine Hive-Abfrage auf der Hadoop-Infrastruktur und nicht auf einer herkรถmmlichen Datenbank ausgefรผhrt wird.
- Die Ausfรผhrung von Hive-Abfragen ist eine Reihe automatisch generierter Abfragen. MapReduce Arbeitsplรคtze.
- Hive unterstรผtzt Partitionierungs- und Bucket-Konzepte, um den Datenabruf beim Ausfรผhren der Abfrage durch den Client zu vereinfachen.
- Hive unterstรผtzt benutzerdefinierte Benutzerdefinierte Funktionen (UDFs) Zur Datenbereinigung, Filterung und รคhnlichen Aufgaben. Entsprechend den Anforderungen der Programmierer kรถnnen Hive-UDFs definiert werden.
Hive vs. relationale Datenbanken
Hive bietet Funktionen, die relationale Datenbanken nicht bieten kรถnnen. Bei Datenmengen im Petabyte-Bereich ist die Reaktionszeit auf Ergebnisse in Sekundenschnelle entscheidend, und Hive erfรผllt diese Anforderung effizient. Die wichtigsten Unterschiede sind folgende.
Relationale Datenbanken sind von โSchema beim Lesen und Schema beim SchreibenโZuerst wird eine Tabelle erstellt, dann werden Daten in diese Tabelle eingefรผgt. In relationalen Datenbanktabellen kรถnnen Funktionen wie Einfรผgungen, Aktualisierungen und รnderungen durchgefรผhrt werden.
Hive ist โSchema schreibgeschรผtztโFunktionen wie Aktualisieren und รndern funktionierten in frรผhen Versionen nicht, da eine Hive-Abfrage in einem typischen Cluster รผber mehrere DataNodes ausgefรผhrt wird, was es unmรถglich machte, Daten รผber mehrere Knoten hinweg zu aktualisieren und zu รคndern (Hive-Versionen unter 0.13).
Hive unterstรผtzt auch die โLies viel, schreibe nur einmal.โ Muster, sodass in neueren Versionen eine Tabelle auch nach dem Einfรผgen aktualisiert werden kann.
Anmerkungen: Neuere Versionen von Hive bieten aktualisierte Funktionen. Hive 0.14 fรผhrte UPDATE und DELETE als neue Funktionen ein, und spรคtere Versionen fรผgten die vollstรคndige Unterstรผtzung fรผr ACID-Transaktionen hinzu.
Die folgende Tabelle fasst den Vergleich zusammen.
| Aspekt | Relationale Datenbank | Apache Hive |
|---|---|---|
| Schemavalidierung | Beim Schreiben | Gelesen |
| Typisches Datenvolumen | Gigabytes bis Terabytes | Terabytes bis Petabytes |
| Arbeitsbelastung | OLTP-Lese- und Schreibvorgรคnge auf Zeilenebene | Vollstรคndige Stapelanalyse |
| Abfragesprache | SQL | HQL, ein von SQL inspirierter Dialekt |
| Ausfรผhrung | Datenbank-Engine | Verteilte Cluster-Jobs |
Hive Architektur
Das folgende Diagramm erklรคrt die Apache Bienenstockarchitektur im Detail.
Hive besteht im Wesentlichen aus 3 Kernkomponenten:
- Hive-Clients
- Hive-Dienste
- Hive-Speicherung und -Verarbeitung
Hive-Clients
Hive bietet verschiedene Treiber fรผr die Kommunikation mit unterschiedlichen Anwendungstypen. Fรผr Thrift-basierte Anwendungen stellt es einen Thrift-Client zur Verfรผgung.
Fรผr Java Fรผr verwandte Anwendungen stellt es JDBC-Treiber bereit. Fรผr alle anderen Anwendungstypen stellt es ODBC-Treiber bereit. Diese Clients und Treiber kommunizieren wiederum mit dem Hive-Server in den Hive-Diensten.
Hive-Dienste
Die Interaktion des Clients mit Hive erfolgt รผber Hive-Dienste. Wenn der Client eine Abfrage in Hive durchfรผhren mรถchte, muss er รผber die Hive-Dienste kommunizieren.
Die CLI fungiert als Hive-Dienst fรผr DDL-Operationen. Alle Treiber kommunizieren mit dem Hive-Server und dem Haupttreiber in den Hive-Diensten, wie im obigen Architekturdiagramm dargestellt.
Der Treiber in Hive-Diensten ist der Haupttreiber: Er kommuniziert mit JDBC, ODBC und anderen clientseitigen Anwendungen und leitet deren Anfragen dann zur weiteren Verarbeitung an den Metastore und das Dateisystem weiter.
Hive-Speicher und Computing
Hive-Dienste wie der Metastore, das Dateisystem und der Jobclient kommunizieren ihrerseits mit dem Hive-Speicher und fรผhren die folgenden Aktionen aus:
- Metadateninformationen รผber in Hive erstellte Tabellen werden in Hive gespeichert. Metastore-Datenbank.
- Die Abfrageergebnisse und die in die Tabellen geladenen Daten werden im Hadoop-Cluster gespeichert. HDFS.
Ablauf der Jobausfรผhrung
Das untenstehende Diagramm traces ist eine Abfrage von der Benutzeroberflรคche zu den DataNodes und zurรผck.
Aus dem obigen Diagramm lรคsst sich der Ablauf der Jobausfรผhrung in Hive mit Hadoop nachvollziehen. Der Datenfluss in Hive folgt folgendem Muster.
- Ausfรผhren einer Abfrage รผber die Benutzeroberflรคche (UI)
- Der Treiber interagiert mit dem Compiler, um den Ausfรผhrungsplan zu erhalten. (Hier bezieht sich der Ausfรผhrungsplan auf den Abfrageausfรผhrungsprozess und die damit verbundene Erfassung von Metadateninformationen.)
- Der Compiler erstellt den Ausfรผhrungsplan fรผr den Job. Der Compiler kommuniziert mit dem Metastore, um die Metadatenanforderung zu erhalten.
- Der Metastore sendet Metadateninformationen an den Compiler zurรผck.
- Der Compiler รผbermittelt dem Treiber den vorgeschlagenen Plan zur Ausfรผhrung der Abfrage.
- Der Treiber sendet Ausfรผhrungsplรคne an die Ausfรผhrungs-Engine.
- Die Ausfรผhrungs-Engine (EE) fungiert als Brรผcke zwischen Hive und Hadoop zur Verarbeitung der Abfrage, einschlieรlich DFS-Operationen:
- Der EE kontaktiert zuerst den NameNode und dann die DataNodes, um die in Tabellen gespeicherten Werte abzurufen.
- Die EE ruft die gewรผnschten Datensรคtze von den DataNodes ab. Die eigentlichen Tabellendaten befinden sich ausschlieรlich auf den DataNodes; vom NameNode werden lediglich Metadaten fรผr die Abfrage abgerufen.
- Es sammelt tatsรคchliche Daten von den Datenknoten, die mit der genannten Abfrage in Zusammenhang stehen.
- Die EE kommuniziert bidirektional mit dem Metastore, um DDL-Operationen (Data Definition Language) durchzufรผhren, wie zum Beispiel ERSTELLEN, LรSCHEN und รNDERN auf Tabellen und Datenbanken. Der Metastore speichert nur Datenbank-, Tabellen- und Spaltennamen.
- Die EE wiederum kommuniziert mit Hadoop-Daemons wie dem NameNode, den DataNodes und dem Job. tracker, um die Abfrage auf dem Hadoop-Dateisystem auszufรผhren
- Ergebnisse vom Treiber abrufen
- Die Ergebnisse werden an die Ausfรผhrungs-Engine gesendet. Sobald die Ergebnisse von den Datenknoten an die Ausfรผhrungs-Engine abgerufen wurden, sendet diese die Ergebnisse zurรผck an den Treiber und an die Benutzeroberflรคche (Frontend).
Hive hรคlt รผber die Ausfรผhrungs-Engine Kontakt zum Hadoop-Dateisystem und seinen Daemons. Der gestrichelte Pfeil im Diagramm veranschaulicht diese Kommunikation.
Verschiedene Hive-Modi
Hive kann je nach Grรถรe der Datenknoten in Hadoop in zwei Modi betrieben werden. Diese Modi sind:
- Lokalbetrieb
- MapReduce-Modus
Wann sollte der lokale Modus verwendet werden?
- Wenn Hadoop im pseudo-verteilten Modus mit einem Datenknoten installiert ist, verwenden wir Hive in diesem Modus.
- Wenn die Datenmenge so klein ist, dass sie auf einen einzelnen lokalen Rechner beschrรคnkt ist, kรถnnen wir diesen Modus verwenden.
- Die Verarbeitung erfolgt bei kleineren Datensรคtzen, die auf dem lokalen Computer vorhanden sind, sehr schnell
Wann sollte der MapReduce-Modus verwendet werden?
- Wenn Hadoop รผber mehrere Datenknoten verfรผgt und die Daten auf die verschiedenen Knoten verteilt sind, verwenden wir Hive in diesem Modus.
- Es verarbeitet groรe Datenmengen und die Abfrage wird parallel ausgefรผhrt.
- Durch diesen Modus kann die Verarbeitung groรer Datensรคtze mit besserer Leistung erreicht werden
In Hive kann man eine Eigenschaft festlegen, um den Arbeitsmodus von Hive anzugeben. Standardmรครig arbeitet es im MapReduce-Modus. Fรผr den lokalen Modus kann man die folgende Einstellung verwenden:
SET mapred.job.tracker=local;
Ab Hive Version 0.7 wird ein Modus unterstรผtzt, der MapReduce-Jobs automatisch lokal ausfรผhrt. In Hive 4.x ist Apache Tez die Standard-Engine, daher gilt diese Eigenschaft fรผr den รคlteren MapReduce-Pfad.
Was ist Hive Server2 (HS2)?
HiveServer2 (HS2) ist eine Serverschnittstelle, die folgende Funktionen ausfรผhrt:
- Ermรถglicht Remote-Clients die Ausfรผhrung von Abfragen fรผr Hive
- Ruft die Ergebnisse dieser Abfragen ab.
Aktuelle Versionen bieten erweiterte Funktionen auf Basis von Thrift RPC, wie zum Beispiel:
- Parallelitรคt mehrerer Clients
- Authentifizierung
HS2 ist die Basis von Beeline und jeder JDBC- oder ODBC-Sitzung, weshalb es die Einzelbenutzer-Hive-CLI ersetzt hat. HiveQL-Operatoren und integrierte Funktionen Eine Referenz ist der logische nรคchste Schritt.


