Data Warehouse auf Hadoop mit SQL-ähnlichen Abfragen (HiveQL) zum Lesen, Schreiben und Verwalten großer Datensätze in verteiltem Speicher mit Schema-on-Read

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.
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.
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:
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.
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.
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.
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 über relationale Datenbanken hinweg zu vergleichen. Dazu gehören Tabellennamen, Spaltennamen, Datentypen, Partitionsinformationen und der Datenspeicherort in HDFS.
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.
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.
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.
Wie der Name schon sagt, handelt es sich hierbei um Datentypen, die auf Ganzzahlen basieren. Beispiele für diese Datentypen sind „TINYINT“, „SMALLINT“, „INT“ und „BIGINT“.
Mit diesen Datentypen können Benutzer eine Uhrzeit und ein Datum eingeben, wobei „TIMESTAMP“, „DATE“ und „INTERVAL“ allesamt akzeptierte Eingaben sind.
Auch dieser Datentyp ist sehr einfach und ermöglicht die Verwendung von geschriebenem Text, also sogenannten „Strings“, als verarbeitbare Daten. Zu Datentypen für Strings gehören „STRING“, „VARCHAR“ und „CHAR“.
Als einer der fortgeschritteneren Datentypen erfassen komplexe Typen detailliertere Daten und setzen sich aus Typen wie „STRUCT“, „MAP“, „ARRAY“ und „UNION“ zusammen.
Datentypen, die in keine der anderen vier Kategorien fallen, werden als sonstige Datentypen bezeichnet und können Eingaben wie „BOOLEAN“ oder „BINARY“ annehmen.