Was sind Apache Hive und HiveQL in Azure HDInsight?What is Apache Hive and HiveQL on Azure HDInsight?

Apache Hive ist ein Data Warehouse-System für Apache Hadoop.Apache Hive is a data warehouse system for Apache Hadoop. Hive ermöglicht das Zusammenfassen, Abfragen und Analysen von Daten.Hive enables data summarization, querying, and analysis of data. Hive-Abfragen werden in HiveQL geschrieben, einer SQL-ähnlichen Abfragesprache.Hive queries are written in HiveQL, which is a query language similar to SQL.

Hive ermöglicht Ihnen die Strukturierung größtenteils unstrukturierter Daten.Hive allows you to project structure on largely unstructured data. Nachdem Sie die Struktur definiert haben, können Sie mit HiveQL Daten abfragen, ohne Java- oder MapReduce-Kenntnisse zu besitzen.After you define the structure, you can use HiveQL to query the data without knowledge of Java or MapReduce.

HDInsight bietet verschiedene Clustertypen, die für bestimmte Workloads optimiert sind.HDInsight provides several cluster types, which are tuned for specific workloads. Die folgenden Clustertypen werden am häufigsten für Hive-Abfragen verwendet:The following cluster types are most often used for Hive queries:

Verwenden von HiveHow to use Hive

In der folgenden Tabelle finden Sie Informationen zu unterschiedlichen Methoden der Verwendung von Hive mit HDInsight:Use the following table to discover the different ways to use Hive with HDInsight:

Verwenden Sie diese Methode für ...Use this method if you want... ...interaktive Abfragen...interactive queries ...Batchverarbeitung...batch processing ...von diesem Clusterbetriebssystem...from this client operating system
HDInsight Tools for Visual Studio CodeHDInsight tools for Visual Studio Code Linux, Unix, Mac OS X oder WindowsLinux, Unix, Mac OS X, or Windows
HDInsight-Tools für Visual StudioHDInsight tools for Visual Studio WindowsWindows
Struktur anzeigenHive View Alle (browserbasiert)Any (browser based)
Beeline-ClientBeeline client Linux, Unix, Mac OS X oder WindowsLinux, Unix, Mac OS X, or Windows
REST-APIREST API   Linux, Unix, Mac OS X oder WindowsLinux, Unix, Mac OS X, or Windows
Windows PowerShellWindows PowerShell   WindowsWindows

Referenz zu HiveQLHiveQL language reference

Die Referenz zu HiveQL ist im Sprachhandbuch verfügbar.HiveQL language reference is available in the language manual.

Hive und DatenstrukturHive and data structure

Hive kann mit strukturierten und halbstrukturierten Daten arbeiten.Hive understands how to work with structured and semi-structured data. Dazu gehören z.B. Textdateien, in denen die Felder durch bestimmte Zeichen getrennt sind.For example, text files where the fields are delimited by specific characters. Die folgende HiveQL-Anweisung erstellt eine Tabelle aus Daten, die durch Leerzeichen getrennt sind:The following HiveQL statement creates a table over space-delimited data:

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.Hive also supports custom serializer/deserializers (SerDe) for complex or irregularly structured data. Weitere Informationen finden Sie im Artikel Verwenden eines benutzerdefinierten JSON-SerDe mit HDInsight.For more information, see the How to use a custom JSON SerDe with HDInsight document.

Weitere Informationen zu von Hive unterstützten Dateiformaten finden Sie im Sprachhandbuch (https://cwiki.apache.org/confluence/display/Hive/LanguageManual).For more information on file formats supported by Hive, see the Language manual (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Interne und externe Hive-TabellenHive internal tables vs external tables

Sie können mit Hive zwei Arten von Tabellen erstellen:There are two types of tables that you can create with Hive:

  • Intern: Die Daten werden im Hive-Data Warehouse gespeichert.Internal: Data is stored in the Hive data warehouse. Dieses Data Warehouse befindet sich unter /hive/warehouse/ im Standardspeicher für den Cluster.The data warehouse is located at /hive/warehouse/ on the default storage for the cluster.

    Verwenden Sie interne Tabellen, wenn eine der folgenden Bedingungen zutrifft:Use internal tables when one of the following conditions apply:

    • Die Daten sind temporär.Data is temporary.
    • Hive soll den Lebenszyklus der Tabelle und der Daten verwalten.You want Hive to manage the lifecycle of the table and data.
  • Extern: Die Daten werden außerhalb des Data Warehouse gespeichert.External: Data is stored outside the data warehouse. Die Daten können auf einem beliebigen Speicher gespeichert werden, der vom Cluster aus erreichbar ist.The data can be stored on any storage accessible by the cluster.

    Verwenden Sie externe Tabellen, wenn eine der folgenden Bedingungen zutrifft:Use external tables when one of the following conditions apply:

    • Die Daten werden auch außerhalb von Hive verwendet.The data is also used outside of Hive. Beispielsweise werden die Datendateien von einem anderen Prozess aktualisiert (der die Dateien nicht sperrt).For example, the data files are updated by another process (that does not lock the files.)
    • Die Daten müssen am zugrunde liegenden Speicherort verbleiben – auch nach dem Löschen der Tabelle.Data needs to remain in the underlying location, even after dropping the table.
    • Sie benötigen einen benutzerdefinierten Speicherort, z.B. ein anderes Speicherkonto als das Standardkonto.You need a custom location, such as a non-default storage account.
    • Ein anderes Programm als Hive verwaltet das Datenformat, den Speicherort usw.A program other than hive manages the data format, location, etc.

Weitere Informationen finden Sie im Blogbeitrag Einführung in interne und externe Tabellen in Hive.For more information, see the Hive Internal and External Tables Intro blog post.

Benutzerdefinierte Funktionen (User Defined Functions, UDFs)User-defined functions (UDF)

Hive kann auch über benutzerdefinierte Funktionen (UDF) erweitert werden.Hive can also be extended through user-defined functions (UDF). Mit einer UDF-Datei können Sie Funktionen oder Logik implementieren, die sich nicht einfach in HiveQL modellieren lässt.A UDF allows you to implement functionality or logic that isn't easily modeled in HiveQL. Ein Beispiel für benutzerdefinierte Funktionen mit Hive finden Sie in den folgenden Artikeln:For an example of using UDFs with Hive, see the following documents:

BeispieldatenExample data

Hive für HDInsight bietet eine vorab geladene, interne Tabelle mit dem Namen hivesampletable.Hive on HDInsight comes pre-loaded with an internal table named hivesampletable. HDInsight stellt auch Beispieldatasets bereit, die mit Hive verwendet werden können.HDInsight also provides example data sets that can be used with Hive. Diese Datasets sind in den Verzeichnissen /example/data und /HdiSamples gespeichert.These data sets are stored in the /example/data and /HdiSamples directories. Diese Verzeichnisse befinden sich im Standardspeicher für den Cluster.These directories exist in the default storage for your cluster.

Hive-BeispielabfrageExample Hive query

Die folgenden HiveQL-Anweisungen projizieren Spalten in die Datei /example/data/sample.log:The following HiveQL statements project columns onto the /example/data/sample.log file:

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:In the previous example, the HiveQL statements perform the following actions:

  • DROP TABLE: Wenn die Tabelle bereits vorhanden ist, wird sie gelöscht.DROP TABLE: If the table already exists, delete it.

  • CREATE EXTERNAL TABLE: Erstellt eine neue externe Tabelle in Hive.CREATE EXTERNAL TABLE: Creates a new external table in Hive. Externe Tabellen speichern nur die Tabellendefinition in Hive.External tables only store the table definition in Hive. Die Daten verbleiben an ihrem ursprünglichen Speicherort und behalten das Originalformat bei.The data is left in the original location and in the original format.

  • ROW FORMAT: Teilt Hive mit, wie die Daten formatiert werden.ROW FORMAT: Tells Hive how the data is formatted. In diesem Fall werden die Felder in den einzelnen Protokollen durch Leerzeichen getrennt.In this case, the fields in each log are separated by a space.

  • STORED AS TEXTFILE LOCATION: Teilt Hive den Speicherort der Daten (das Verzeichnis example/data) mit und dass die Speicherung als Text erfolgt.STORED AS TEXTFILE LOCATION: Tells Hive where the data is stored (the example/data directory) and that it is stored as text. Die Daten können sich in einer Datei befinden oder auf mehrere Dateien im Verzeichnis verteilt sein.The data can be in one file or spread across multiple files within the directory.

  • SELECT: Wählt die Anzahl aller Zeilen aus, bei denen die Spalte t4 den Wert [ERROR] enthält.SELECT: Selects a count of all rows where the column t4 contains the value [ERROR]. Mit dieser Anweisung wird der Wert 3 zurückgegeben, da dieser Wert in drei Zeilen enthalten ist.This statement returns a value of 3 because there are three rows that contain this value.

  • INPUT__FILE__NAME LIKE '%.log': Hive versucht, das Schema auf alle Dateien im Verzeichnis anzuwenden.INPUT__FILE__NAME LIKE '%.log' - Hive attempts to apply the schema to all files in the directory. In diesem Fall enthält das Verzeichnis Dateien, die dem Schema nicht entsprechen.In this case, the directory contains files that do not match the schema. Um überflüssige Daten in den Ergebnissen zu vermeiden, weist diese Anweisung Hive an, nur Daten aus Dateien zurückzugeben, die auf „.log“ enden.To prevent garbage data in the results, this statement tells Hive that we should only return data from files ending in .log.

Hinweis

Externe Tabellen sollten Sie verwenden, wenn Sie erwarten, dass die zugrunde liegenden Daten aus einer externen Quelle aktualisiert werden.External tables should be used when you expect the underlying data to be updated by an external source. Das könnte z.B. ein automatisierter Datenupload oder ein MapReduce-Vorgang sein.For example, an automated data upload process, or MapReduce operation.

Durch das Löschen einer externen Tabelle werden nicht die Daten, sondern nur die Tabellendefinitionen gelöscht.Dropping an external table does not delete the data, it only deletes the table definition.

Zum Erstellen einer internen anstelle einer externen Tabelle, verwenden Sie den folgenden HiveQL-Code:To create an internal table instead of external, use the following HiveQL:

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:These statements perform the following actions:

  • CREATE TABLE IF NOT EXISTS: Wenn die Tabelle nicht vorhanden ist, wird sie erstellt.CREATE TABLE IF NOT EXISTS: If the table does not exist, create it. Da das Schlüsselwort EXTERNAL nicht verwendet wird, erstellt diese Anweisung eine interne Tabelle.Because the EXTERNAL keyword is not used, this statement creates an internal table. Die Tabelle wird im Hive-Data Warehouse gespeichert und vollständig von Hive verwaltet.The table is stored in the Hive data warehouse and is managed completely by Hive.

  • STORED AS ORC: Speichert die Daten im ORC-Format (Optimized Row Columnar).STORED AS ORC: Stores the data in Optimized Row Columnar (ORC) format. ORC ist ein stark optimiertes und effizientes Format zum Speichern von Hive-Daten.ORC is a highly optimized and efficient format for storing Hive data.

  • INSERT OVERWRITE ... SELECT: Wählt Zeilen in der Tabelle log4jLogs aus, die [ERROR] enthalten, und fügt die Daten in die Tabelle errorLogs ein.INSERT OVERWRITE ... SELECT: Selects rows from the log4jLogs table that contains [ERROR], and then inserts the data into the errorLogs table.

Hinweis

Anders als bei externen Tabellen werden beim Löschen von internen Tabellen auch die zugrunde liegenden Daten gelöscht.Unlike external tables, dropping an internal table also deletes the underlying data.

Verbessern der Hive-AbfrageleistungImprove Hive query performance

Apache TezApache Tez

Apache Tez ist ein Framework, mit dem datenintensive Anwendungen wie Hive wesentlich effizienter ausgeführt und skaliert werden können.Apache Tez is a framework that allows data intensive applications, such as Hive, to run much more efficiently at scale. „Tez“ ist standardmäßig aktiviert.Tez is enabled by default. Die Apache Hive mit Tez-Design-Dokumente enthalten Details zu Implementierungsoptionen und Konfigurationseinstellungen.The Apache Hive on Tez design documents contains details about the implementation choices and tuning configurations.

Low Latency Analytical Processing (LLAP)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.LLAP (sometimes known as Live Long and Process) is a new feature in Hive 2.0 that allows in-memory caching of queries. LLAP macht Hive-Abfragen deutlich schneller – bis zu in einigen Fällen 26-mal schneller als Hive 1.x.LLAP makes Hive queries much faster, up to 26x faster than Hive 1.x in some cases.

HDInsight stellt LLAP im Clustertyp „Interactive Query“ bereit.HDInsight provides LLAP in the Interactive Query cluster type. Weitere Informationen finden Sie unter Start with Interactive Query (Einstieg in Interactive Query.For more information, see the Start with Interactive Query document.

Planen von Hive-AbfragenScheduling Hive queries

Es gibt mehrere Dienste, mit denen Hive-Abfragen als Teil eines geplanten oder bedarfsgesteuerten Workflows ausgeführt werden können.There are several services that can be used to run Hive queries as part of a scheduled or on-demand workflow.

Azure Data FactoryAzure Data Factory

Azure Data Factory ermöglicht Ihnen, HDInsight als Teil einer Data Factory-Pipeline zu verwenden.Azure Data Factory allows you to use HDInsight as part of a Data Factory pipeline. Weitere Informationen zum Verwenden von Hive aus einer Pipeline finden Sie im Dokument Transformieren von Daten mit Hive-Aktivitäten in Azure Data Factory.For more information on using Hive from a pipeline, see the Transform data using Hive activity in Azure Data Factory document.

Hive-Aufträge und SQL Server Integration ServicesHive jobs and SQL Server Integration Services

Sie können mit SQL Server Integration Services (SSIS) einen Hive-Auftrag ausführen.You can use SQL Server Integration Services (SSIS) to run a Hive job. Das Azure Feature Pack für SSIS bietet die folgenden Komponenten, die mit Hive-Aufträgen in HDInsight funktionieren.The Azure Feature Pack for SSIS provides the following components that work with Hive jobs on HDInsight.

Weitere Informationen finden Sie in der Dokumentation des Azure Feature Pack.For more information, see the Azure Feature Pack documentation.

Apache OozieApache Oozie

Apache Oozie ist ein Workflow- und Koordinationssystem zur Verwaltung von Hadoop-Aufträgen.Apache Oozie is a workflow and coordination system that manages Hadoop jobs. Weitere Informationen zur Verwendung von Oozie mit Hive finden Sie im Dokument Definieren und Ausführen eines Workflows mit Apache Oozie.For more information on using Oozie with Hive, see the Use Apache Oozie to define and run a workflow document.

Nächste SchritteNext steps

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.Now that you've learned what Hive is and how to use it with Hadoop in HDInsight, use the following links to explore other ways to work with Azure HDInsight.