Direkt zum Hauptinhalt

Apache Hive

DATABRICKS KOSTENLOS TESTEN

Was ist Apache Hive?

Apache Hive ist eine Open-Source-Data-Warehouse-Software zum Lesen, Schreiben und Verwalten großer Datasets, die aus dem Apache Hadoop Distributed File System (HDFS) (HDFS) extrahiert wurden, eine Komponente eines größeren Hadoop-Ökosystems.

Dank umfangreicher Apache-Hive-Dokumentationen und kontinuierlichen Updates sorgt Apache Hive auf benutzerfreundliche Weise weiterhin für Innovationen bei der Datenverarbeitung.

Die Geschichte von Apache Hive

Apache Hive ist ein Open-Source-Projekt, das von den beiden Entwicklern Joydeep Sen Sarma und Ashish Thoseoo während ihrer Zeit bei Facebook konzipiert wurde. Hive begann als Unterprojekt von Apache Hadoop, hat sich aber zu einem eigenständigen Top-Level-Projekt entwickelt. Mit den zunehmenden Beschränkungen von Hadoop- und MapReduce-Jobs und dem Anstieg der Datenmenge von 10 GB pro Tag im Jahr 2006 auf 1 TB/Tag und innerhalb weniger Jahre auf 15 TB/Tag wurde eine neue Lösung notwendig. Den Engineers bei Facebook war es nicht mehr möglich, die komplexen Jobs problemlos auszuführen, was zur Entwicklung von Hive führte.

Apache Hive wurde entwickelt, um zwei Ziele zu erreichen: eine SQL-basierte deklarative Sprache, die es Engineers ermöglicht, ihre eigenen Skripte und Programme einzubinden, wenn SQL nicht ausreicht. Außerdem sollten die meisten Engineers (mit SQL-Kenntnissen) Hive mit minimalen Unterbrechungen oder Umschulungen im Vergleich zu anderen nutzen können.

Zweitens stellte es einen zentralen Metadatenspeicher (Hadoop-basiert) aller Datasets im Unternehmen bereit. Während Apache Hive ursprünglich von Facebook entwickelt wurde, wird es heute auch von anderen Unternehmen wie Netflix verwendet und weiterentwickelt. Amazon unterhält einen Software-Fork von Apache Hive, der in Amazon Elastic MapReduce in Amazon Web Services enthalten ist.

Einige Features von Hive

Apache Hive unterstützt die Analyse großer Datasets, die im HDFS von Hadoop und kompatiblen Dateisystemen wie Amazon S3, Azure Blob Storage, Azure Data Lake Storage, Google Cloud Storage und Alluxio gespeichert sind.

Es bietet eine SQL-ähnliche Abfragesprache namens HiveQL mit Schema-on-Read und konvertiert Abfragen transparent in Apache Spark-, MapReduce- und Apache Tez-Jobs. Zu den weiteren Features von Hive gehören:

  • Hive-Datenfunktionen helfen bei der Verarbeitung und Abfrage großer Datasets. Diese Funktionen bieten unter anderem Stringbearbeitungen, Datumsbearbeitungen, Typkonvertierungen, bedingte Operatoren, mathematische Funktionen usw.
  • Speicherung von Metadaten in einem Verwaltungssystem für relationale Datenbanken
  • Verschiedene Speichertypen wie Parquet, Klartext, RCFile, HBase, ORC und andere
  • Vorgänge mit komprimierten Daten, die mithilfe von Algorithmen im Hadoop-Ökosystem gespeichert sind
  • Integrierte, benutzerdefinierte Funktionen (user-defined functions, UDFs) zur Bearbeitung von Datumsangaben, Strings und anderen Data-Mining-Tools. Hive unterstützt die Erweiterung des UDF-Sets, um Anwendungsfälle zu verarbeiten, die nicht von integrierten Funktionen unterstützt werden
  • SQL-ähnliche Abfragen (HiveQL), die implizit in MapReduce oder Tez umgewandelt werden, oder Spark-Jobs

Apache-Hive-Architektur und wichtige Apache-Hive-Komponenten

Die wichtigsten Komponenten der Apache-Hive-Architektur sind der Hive Server 2, Hive Query Language (HQL), der externe Apache Hive Metastore und die Hive Beeline Shell.

Hive Server 2

Der Hive Server 2 akzeptiert eingehende Anfragen von Benutzern und Anwendungen, erstellt einen Ausführungsplan und generiert automatisch einen YARN-Job zur Verarbeitung von SQL-Abfragen. Der Server unterstützt außerdem den Hive-Optimierer und den Hive-Compiler, um die Datenextraktion und -verarbeitung zu optimieren.

Hive Query Language (HQL)

Durch die Implementierung von SQL-ähnlichem Code macht Apache Hive die Notwendigkeit langwieriger JavaScript-Codes zum Sortieren unstrukturierter Daten überflüssig und ermöglicht Benutzern die Durchführung von Abfragen mithilfe integrierter HQL-Anweisungen. Diese Anweisungen können verwendet werden, um große Datasets zu durchsuchen, Ergebnisse zu verfeinern und Daten auf kostengünstige und zeiteffiziente Weise auszutauschen.

Hive Metastore

Der Metastore ist das zentrale Repository der Apache Hive-Infrastruktur und speichert alle Metadaten von Hive. Im Metastore können Metadaten auch in Hive-Tabellen und -Partitionen formatiert werden, um Daten in relationalen Datenbanken zu vergleichen. Dazu gehören Tabellennamen, Spaltennamen, Datentypen, Partitionsinformationen und der Datenspeicherort in HDFS.

Hive Beeline Shell

Wie andere Datenbankmanagementsysteme (DBMS) verfügt Hive über eine eigene integrierte Befehlszeilenschnittstelle, über die Benutzer HQL-Anweisungen ausführen können. Außerdem führt die Hive Shell auch Hive-JDBC- und ODBC-Treiber aus und kann so Abfragen aus einer Open-Database-Connectivity- oder Java-Database-Connectivity-Anwendung durchführen.

Wie funktioniert die Apache Hive-Software?

Der Hive Server 2 akzeptiert eingehende Anfragen von Benutzern und Anwendungen vor der Erstellung eines Ausführungsplans und generiert automatisch einen YARN-Job zur Verarbeitung von SQL-Abfragen. Der YARN-Job kann als MapReduce-, Tez- oder Spark-Workload generiert werden.

Dieser Task funktioniert dann als verteilte Anwendung in Hadoop. Sobald die SQL-Abfrage verarbeitet wurde, werden die Ergebnisse entweder an den Endbenutzer oder die Anwendung zurückgegeben oder an das HDFS zurückübertragen.

Der Hive Metastore nutzt dann eine relationale Datenbank wie Postgres oder MySQL, um diese Metadaten beizubehalten, wobei der Hive Server 2 die Tabellenstruktur als Teil seiner Abfrage abruft. In einigen Fällen fragen Anwendungen im Rahmen ihrer zugrunde liegenden Verarbeitung möglicherweise auch den Metastore ab.

Hive-Workloads werden dann in YARN, dem Hadoop-Ressourcenmanager, ausgeführt, um eine Verarbeitungsumgebung bereitzustellen, die Hadoop-Jobs ausführen kann. Diese Verarbeitungsumgebung besteht aus zugewiesenen Ressourcen (Speicher und CPU von den verschiedenen Worker-Knoten in den Hadoop-Clustern).

YARN wird versuchen, HDFS-Metadateninformationen zu nutzen, um sicherzustellen, dass die Verarbeitung dort erfolgt, wo sich die benötigten Daten befinden. Mit MapReduce, Tez, Spark oder Hive kann automatisch Code für SQL-Abfragen als MapReduce-, Tez- oder Spark-Jobs generiert werden.

Obwohl Hive MapReduce erst seit kurzem nutzt, ist Hive in den meisten Cloudera-Hadoop-Bereitstellungen für die Verwendung von MapReduce oder manchmal auch Spark konfiguriert. Bei Bereitstellungen mit Hortonworks (HDP) ist normalerweise Tez als Ausführungs-Engine eingerichtet.

Welche fünf verschiedenen Datentypen werden von Apache Hive verwendet?

Durch den Einsatz der Batch-Verarbeitung ist Apache Hive in der Lage, Petabytes an Daten mit hoher Geschwindigkeit effizient zu extrahieren und zu analysieren. Daher ist es ideal für die Verarbeitung nicht nur der Daten, sondern auch für die Ausführung von Ad-hoc-Abfragen.

Die Apache Hive-Datentypen bestehen aus fünf Kategorien: Numerisch, Datum/Uhrzeit, Strings, Komplex und Sonstiges.

Numerische Datentypen

Wie der Name schon sagt, sind diesDatentypen um, die auf Ganzzahlen basieren. Beispiele für diese Datentypen sind „TINYINT“, „SMALLINT“, „INT“ und „BIGINT“.

Datentypen für Datum/Uhrzeit

Mit diesen Datentypen können Benutzer eine Uhrzeit und ein Datum eingeben, wobei „TIMESTAMP“, „DATE“ und „INTERVAL“ allesamt akzeptierte Eingaben sind.

Datentypen für Strings

Auch dieser Datentyp ist sehr einfach und ermöglicht die Implementierung von geschriebenem Text bzw. „Strings“ als Daten zur Verarbeitung. Zu Datentypen für Strings gehören „STRING“, „VARCHAR“ und „CHAR“.

Komplexe Datentypen

Als einer der fortgeschritteneren Datentypen zeichnen komplexe Typen komplexere Daten auf und bestehen aus Typen wie „STRUCT“, „MAP“, „ARRAY“ und „UNION“.

Datentypen für Sonstiges

Datentypen, die in keine der anderen vier Kategorien passen, werden als sonstige Datentypen bezeichnet und können Eingaben wie „BOOLEAN“ oder „BINARY“ annehmen.

So funktioniert Map Join in Hive Apache

In Apache Hive ist Map Join ein Feature, das dazu dient, die Geschwindigkeit und Effizienz einer Abfrage zu erhöhen, indem Daten aus zwei Tabellen kombiniert bzw. „verknüpft“ werden und dabei die MapReduce-Phasen des Vorgangs umgangen werden.

Was ist ein Relational Database Management System (RDBMS) und wie verwendet Apache Hive dieses System?

Ein Relational Database Management System (RDBMS) ist ein Datenbankmodell, das Metadaten in einer zeilen- oder spaltenbasierten Tabellenstruktur speichert und die Verbindung und den Vergleich verschiedener Datasets ermöglicht.

Durch die Verwendung eines RDBMS ermöglicht Apache Hive, dass alle Daten sicher, zuverlässig und genau gespeichert und verarbeitet werden, da integrierte Features wie rollenbasierte Sicherheit und verschlüsselte Kommunikation sicherstellen, dass nur die richtigen Personen Zugriff auf die extrahierten Information erhalten.

Was ist der Unterschied zwischen Apache Hive und einem herkömmlichen RDBMS?

Es gibt einige entscheidende Unterschiede zwischen Apache Hive und einem RDBMS:

  • RDBMS-Funktionen arbeiten mit mehrfachem Lesen und Schreiben, während Hive mit einmaligem Schreiben und mehrfachem Lesen arbeitet.
  • Hive folgt der Schema-on-Read-Regel, was bedeutet, dass keine Validierung, Überprüfung oder Analyse der Daten erfolgt, sondern lediglich Dateien kopiert/verschoben werden. In herkömmlichen Datenbanken wird ein Schema auf eine Tabelle angewendet, das ein Schema für eine Schreibregel erzwingt.
  • Da Hive auf Hadoop aufbaut, muss es dieselben Einschränkungen wie Hadoop und MapReduce einhalten, die für andere RDBMS möglicherweise nicht vorliegen.

Apache Hive vs. Apache Spark

Apache Spark ist ein Analytics-Framework, das für die Verarbeitung großer Datenmengen über verschiedene Datasets hinweg entwickelt wurde. Es bietet eine leistungsstarke Benutzeroberfläche, die verschiedene Sprachen von R bis Python unterstützen kann.

Hive bietet eine Abstraktionsschicht, die die Daten als Tabellen mit Zeilen, Spalten und Datentypen zur Abfrage und zur Analyse mithilfe einer SQL-Schnittstelle namens HiveQL darstellt. Apache Hive unterstützt ACID-Transaktionen mit Hive LLAP. Transaktionen garantieren konsistente Ansichten der Daten in einer Umgebung, in der mehrere Benutzer/Prozesse gleichzeitig auf die Daten für CRUD-Vorgänge (Create, Read, Update and Delete) zugreifen.

Databricks bietet Delta Lake an, das Hive LLAP insofern ähnelt, als es ACID-Transaktionsgarantien bietet. Es bietet aber noch mehrere andere Vorteile, die die Performance und Zuverlässigkeit beim Zugriff auf die Daten verbessern. Spark SQL ist das Modul von Apache Spark für Interaktionen mit strukturierten Daten, die als Tabellen mit Zeilen, Spalten und Datentypen dargestellt werden.

Spark SQL ist SQL-2003-kompatibel und verwendet Apache Spark als verteilte Engine zur Verarbeitung der Daten. Zusätzlich zur Spark-SQL-Schnittstelle kann eine DataFrames-API verwendet werden, um mit den Daten unter Verwendung von Java, Scala, Python und R zu interagieren. Spark SQL ähnelt HiveQL.

Beide verwenden die ANSI-SQL-Syntax und die meisten Hive-Funktionen werden in Databricks ausgeführt. Dazu gehören Hive-Funktionen für Datums-/Uhrzeitkonvertierungen und -analysen, Erfassungen, Stringbearbeitungen, mathematische Operationen und bedingte Funktionen.

Es gibt einige Hive-spezifische Funktionen, die in das Spark-SQL-Äquivalent konvertiert werden müssten oder in Spark SQL in Databricks nicht vorhanden sind. Sie können davon ausgehen, dass die gesamte ANSI-SQL-Syntax von HiveQL mit Spark SQL in Databricks funktioniert.

Dazu gehören ANSI-SQL-Aggregierungs- und -Analysefunktionen. Hive ist für das Dateiformat Optimized Row Columnar (ORC) optimiert und unterstützt auch Parquet. Databricks ist für Parquet und Delta optimiert, unterstützt aber auch ORC. Wir empfehlen immer die Verwendung von Delta, das das Open-Source-Dateiformat Parquet verwendet.

Apache Hive vs. Presto

Das ursprünglich bei Facebook konzipierte Projekt, PrestoDB, besser bekannt als Presto, ist eine verteilte SQL-Abfrage-Engine, mit der Benutzer Petabytes an Daten mit hoher Geschwindigkeit verarbeiten und analysieren können. Die Infrastruktur von Presto unterstützt die Integration sowohl relationaler als auch nicht relationaler Datenbanken von MySQL und Teradata bis hin zu MongoDB und Cassandra.

Zusätzliche Ressourcen

Zurück zum Glossar