Was sind Apache Hive und HiveQL in Azure HDInsight?

Apache Hive ist ein Data Warehouse-System für Apache Hadoop. Hive ermöglicht das Zusammenfassen, Abfragen und Analysen von Daten. Hive-Abfragen werden in HiveQL geschrieben, einer SQL-ähnlichen Abfragesprache.

Hive ermöglicht Ihnen die Strukturierung größtenteils unstrukturierter Daten. Nachdem Sie die Struktur definiert haben, können Sie mit HiveQL Daten abfragen, ohne Java- oder MapReduce-Kenntnisse zu besitzen.

HDInsight bietet verschiedene Clustertypen, die für bestimmte Workloads optimiert sind. Die folgenden Clustertypen werden am häufigsten für Hive-Abfragen verwendet:

Clustertyp BESCHREIBUNG
Interactive Query Hadoop-Cluster mit LLAP-Funktionalität (Low Latency Analytical Processing) zur Verbesserung der Antwortzeiten für interaktive Abfragen. Weitere Informationen finden Sie unter Start with Interactive Query in HDInsight (Einstieg in Interactive Query in HDInsight).
Hadoop Hadoop-Cluster, der für die Batchverarbeitung von Workloads optimiert ist. Weitere Informationen finden Sie unter Einstieg in Apache Hadoop in HDInsight.
Spark Apache Spark verfügt über integrierte Funktionen für die Arbeit mit Hive. Weitere Informationen finden Sie unter Einstieg in Apache Spark in HDInsight.
hbase HiveQL kann zum Abfragen von Daten verwendet werden, die in Apache HBase gespeichert sind. Weitere Informationen finden Sie unter Einstieg in Apache HBase in HDInsight.

Verwenden von Hive

In der folgenden Tabelle finden Sie Informationen zu unterschiedlichen Methoden der Verwendung von Hive mit HDInsight:

Verwenden Sie diese Methode für ... ...interaktive Abfragen ...Batchverarbeitung ...von diesem Clusterbetriebssystem
HDInsight Tools for Visual Studio Code Linux, Unix, macOS X oder Windows
HDInsight-Tools für Visual Studio Windows
Struktur anzeigen Alle (browserbasiert)
Beeline-Client Linux, Unix, macOS X oder Windows
REST-API   Linux, Unix, macOS X oder Windows
Windows PowerShell   Windows

Referenz zu HiveQL

Die Referenz zu HiveQL ist im Sprachhandbuch verfügbar.

Hive und Datenstruktur

Hive kann mit strukturierten und halbstrukturierten Daten arbeiten. Dazu gehören z.B. Textdateien, in denen die Felder durch bestimmte Zeichen getrennt sind. Die folgende HiveQL-Anweisung erstellt eine Tabelle aus Daten, die durch Leerzeichen getrennt sind:

CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';

Hive unterstützt auch benutzerdefinierte Serialisierer/Deserialisierer (SerDe) für komplexe oder unregelmäßig strukturierte Daten. Weitere Informationen finden Sie im Artikel Verwenden eines benutzerdefinierten JSON-SerDe mit HDInsight.

Weitere Informationen zu von Hive unterstützten Dateiformaten finden Sie im Sprachhandbuch(https://cwiki.apache.org/confluence/display/Hive/LanguageManual).

Interne und externe Hive-Tabellen

Sie können mit Hive zwei Arten von Tabellen erstellen:

  • Intern: Die Daten werden im Hive-Data Warehouse gespeichert. Dieses Data Warehouse befindet sich unter /hive/warehouse/ im Standardspeicher für den Cluster.

    Verwenden Sie interne Tabellen, wenn eine der folgenden Bedingungen zutrifft:

    • Die Daten sind temporär.
    • Hive soll den Lebenszyklus der Tabelle und der Daten verwalten.
  • Extern: Die Daten werden außerhalb des Hive-Data Warehouse gespeichert. Die Daten können auf einem beliebigen Speicher gespeichert werden, der vom Cluster aus erreichbar ist.

    Verwenden Sie externe Tabellen, wenn eine der folgenden Bedingungen zutrifft:

    • Die Daten werden auch außerhalb von Hive verwendet. Beispielsweise werden die Datendateien von einem anderen Prozess aktualisiert (der die Dateien nicht sperrt).
    • Die Daten müssen am zugrunde liegenden Speicherort verbleiben – auch nach dem Löschen der Tabelle.
    • Sie benötigen einen benutzerdefinierten Speicherort, z.B. ein anderes Speicherkonto als das Standardkonto.
    • Ein anderes Programm als Hive verwaltet das Datenformat, den Speicherort usw.

Weitere Informationen finden Sie im Blogbeitrag Einführung in interne und externe Tabellen in Hive.

Benutzerdefinierte Funktionen (User Defined Functions, UDFs)

Hive kann auch über benutzerdefinierte Funktionen (UDF)erweitert werden. Mit einer UDF-Datei können Sie Funktionen oder Logik implementieren, die sich nicht einfach in HiveQL modellieren lässt. Ein Beispiel für benutzerdefinierte Funktionen mit Hive finden Sie in den folgenden Artikeln:

Beispieldaten

Hive für HDInsight bietet eine vorab geladene, interne Tabelle mit dem Namen hivesampletable. HDInsight stellt auch Beispieldatasets bereit, die mit Hive verwendet werden können. Diese Datasets sind in den Verzeichnissen /example/data und /HdiSamples gespeichert. Diese Verzeichnisse befinden sich im Standardspeicher für den Cluster.

Hive-Beispielabfrage

Die folgenden HiveQL-Anweisungen projizieren Spalten in die Datei /example/data/sample.log:

DROP TABLE log4jLogs;
CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
    WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
    GROUP BY t4;

Im vorherigen Beispiel führen die HiveQL-Anweisungen die folgenden Aktionen aus:

-Anweisung. BESCHREIBUNG
DROP TABLE Wenn die Tabelle bereits vorhanden ist, wird sie gelöscht.
CREATE EXTERNAL TABLE Erstellt eine neue externe Tabelle in Hive. Externe Tabellen speichern nur die Tabellendefinition in Hive. Die Daten verbleiben an ihrem ursprünglichen Speicherort und behalten das Originalformat bei.
ROW FORMAT Teilt Hive mit, wie die Daten formatiert werden. In diesem Fall werden die Felder in den einzelnen Protokollen durch Leerzeichen getrennt.
STORED AS TEXTFILE LOCATION Teilt Hive den Speicherort der Daten (das Verzeichnis example/data) mit und dass die Speicherung als Text erfolgt. Die Daten können sich in einer Datei befinden oder auf mehrere Dateien im Verzeichnis verteilt sein.
SELECT Wählt die Anzahl aller Zeilen aus, bei denen die Spalte t4 den Wert [ERROR] enthält. Mit dieser Anweisung wird der Wert 3 zurückgegeben, da dieser Wert in drei Zeilen enthalten ist.
INPUT__FILE__NAME LIKE '%.log' Hive versucht, das Schema auf alle Dateien im Verzeichnis anzuwenden. In diesem Fall enthält das Verzeichnis Dateien, die dem Schema nicht entsprechen. Um überflüssige Daten in den Ergebnissen zu vermeiden, weist diese Anweisung Hive an, nur Daten aus Dateien zurückzugeben, die auf „.log“ enden.

Hinweis

Externe Tabellen sollten Sie verwenden, wenn Sie erwarten, dass die zugrunde liegenden Daten aus einer externen Quelle aktualisiert werden. Das könnte z.B. ein automatisierter Datenupload oder ein MapReduce-Vorgang sein.

Durch das Löschen einer externen Tabelle werden nicht die Daten, sondern nur die Tabellendefinitionen gelöscht.

Zum Erstellen einer internen anstelle einer externen Tabelle, verwenden Sie den folgenden HiveQL-Code:

CREATE TABLE IF NOT EXISTS errorLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7 
    FROM log4jLogs WHERE t4 = '[ERROR]';

Diese Anweisungen führen die folgenden Aktionen aus:

-Anweisung. BESCHREIBUNG
CREATE TABLE IF NOT EXISTS Erstellt die Tabelle, wenn sie nicht vorhanden ist. Da das EXTERNAL-Schlüsselwort nicht verwendet wird, erstellt diese Anweisung eine interne Tabelle. Die Tabelle wird im Hive-Data Warehouse gespeichert und vollständig von Hive verwaltet.
STORED AS ORC Speichert die Daten im ORC-Format (Optimized Row Columnar). ORC ist ein stark optimiertes und effizientes Format zum Speichern von Hive-Daten.
INSERT OVERWRITE ... SELECT Markiert Zeilen aus der Tabelle, die log4jLogs [ERROR] enthält, und fügt dann die Daten in die ErrorLogs-Tabelle ein.

Hinweis

Anders als bei externen Tabellen werden beim Löschen von internen Tabellen auch die zugrunde liegenden Daten gelöscht.

Verbessern der Hive-Abfrageleistung

Apache Tez

Apache Tez ist ein Framework, mit dem datenintensive Anwendungen wie Hive wesentlich effizienter ausgeführt und skaliert werden können. „Tez“ ist standardmäßig aktiviert. Die Apache Hive mit Tez-Design-Dokumente enthalten Details zu Implementierungsoptionen und Konfigurationseinstellungen.

Low Latency Analytical Processing (LLAP)

LLAP (auch als „Live Long and Process“ bezeichnet) ist ein neues Feature in Hive 2.0, das die Zwischenspeicherung von Abfragen im Arbeitsspeicher ermöglicht.

HDInsight stellt LLAP im Clustertyp „Interactive Query“ bereit. Weitere Informationen finden Sie unter Start with Interactive Query (Einstieg in Interactive Query.

Planen von Hive-Abfragen

Es gibt mehrere Dienste, mit denen Hive-Abfragen als Teil eines geplanten oder bedarfsgesteuerten Workflows ausgeführt werden können.

Azure Data Factory

Azure Data Factory ermöglicht Ihnen, HDInsight als Teil einer Data Factory-Pipeline zu verwenden. Weitere Informationen zum Verwenden von Hive aus einer Pipeline finden Sie im Dokument Transformieren von Daten mit Hive-Aktivitäten in Azure Data Factory.

Hive-Aufträge und SQL Server Integration Services

Sie können mit SQL Server Integration Services (SSIS) einen Hive-Auftrag ausführen. Das Azure Feature Pack für SSIS bietet die folgenden Komponenten, die mit Hive-Aufträgen in HDInsight funktionieren.

Weitere Informationen finden Sie in der Dokumentation des Azure Feature Pack.

Apache Oozie

Apache Oozie ist ein Workflow- und Koordinationssystem zur Verwaltung von Hadoop-Aufträgen. Weitere Informationen zur Verwendung von Oozie mit Hive finden Sie im Dokument Definieren und Ausführen eines Workflows mit Apache Oozie.

Hinweis

Phoenix Storage Handler für Hive wird in HDInsight nicht unterstützt

Nächste Schritte

Nachdem Sie erfahren haben, was Hive ist und wie Sie es mit Hadoop in HDInsight verwenden, können Sie mithilfe der nachfolgenden Links andere Möglichkeiten für die Arbeit mit Azure HDInsight untersuchen.