Présentation d’Apache Hive et HiveQL sur Azure HDInsight

Apache Hive est un système d’entrepôt de données pour Apache Hadoop. Hive permet la synthèse, l’interrogation et l’analyse des données. Les requêtes Hive sont écrites dans le langage HiveQL, qui est un langage de requête semblable à SQL.

Hive vous permet de concevoir une structure sur des données largement non structurées. Une fois que vous avez défini la structure, vous pouvez utiliser HiveQL pour interroger les données sans connaître Java ou MapReduce.

HDInsight fournit plusieurs types de cluster adaptés à des charges de travail spécifiques. Voici les types de cluster les plus souvent utilisés pour les requêtes Hive :

Type de cluster Description
Interactive Query Cluster Hadoop qui offre une fonctionnalité LLAP (Low Latency Analytical Processing) afin d’améliorer les temps de réponse des requêtes interactives. Pour plus d’informations, consultez le document Démarrer avec Interactive Query dans HDInsight.
Hadoop Cluster Hadoop adapté aux charges de travail de traitement par lots. Pour plus d’informations, consultez le document Démarrer avec Apache Hadoop dans HDInsight.
Spark Apache Spark intègre une fonctionnalité permettant d’utiliser Hive. Pour plus d’informations, consultez le document Démarrer avec Apache Spark dans HDInsight.
hbase HiveQL peut être utilisé pour interroger les données stockées dans Apache HBase. Pour plus d’informations, consultez le document Démarrer avec Apache HBase dans HDInsight.

Utilisation de Hive

Consultez le tableau suivant pour découvrir les différentes façon d’utiliser Hive avec HDInsight :

Utilisez cette méthode si vous souhaitez... ... des requêtes interactives ... un traitement par lots ...depuis ce système d’exploitation cluster
HDInsight Tools pour Visual Studio Code Linux, Unix, macOS X ou Windows
Outils HDInsight pour Visual Studio Windows
Affichage Hive N’importe lequel (basé sur le navigateur)
Client Beeline Linux, Unix, macOS X ou Windows
REST API   Linux, Unix, macOS X ou Windows
Windows PowerShell   Windows

Référence du langage HiveQL

Les informations de référence sur le langage HiveQL sont disponibles dans le manuel du langage.

Hive et structure des données

Hive est capable de travailler avec des données structurées et semi-structurées. Par exemple, les fichiers texte dans lesquels les champs sont délimités par des caractères spécifiques. L’instruction HiveQL suivante crée une table à partir de données délimitées par des espaces :

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 prend également en charge un sérialiseur/ désérialiseur (SerDe) personnalisé pour des données structurées de manière irrégulière ou complexes. Pour plus d’informations, consultez le document Utilisation d’un SerDe JSON personnalisé avec HDInsight.

Pour plus d’informations sur les formats de fichier pris en charge par Hive, consultez le manuel de langage(https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Tables internes et externes Hive

Hive vous permet de créer deux types de tables :

  • Interne : les données sont stockées dans l’entrepôt de données Hive. L’entrepôt de données se trouve dans /hive/warehouse/ sur le stockage par défaut du cluster.

    Utilisez des tables internes lorsque l’une des conditions suivantes s’applique :

    • les données sont temporaires.
    • Vous voulez que Hive gère le cycle de vie de la table et des données.
  • Externe : les données sont stockées en dehors de l’entrepôt de données. Les données peuvent être stockées sur tout stockage accessible par le cluster.

    Utilisez des tables externes quand l’une des conditions suivantes s’applique :

    • Les données sont également utilisées en dehors de Hive. Par exemple, les fichiers de données sont mis à jour par un autre processus (qui ne verrouille pas les fichiers).
    • Les données doivent rester dans l’emplacement sous-jacent, même après suppression de la table.
    • Vous avez besoin d’un emplacement personnalisé, par exemple un compte de stockage non sélectionné par défaut.
    • Un programme autre que Hive gère le format de données, l’emplacement, etc.

Pour plus d’informations, consultez le billet de blog Introduction aux tables interne et externe Hive.

Fonctions définies par l’utilisateur (UDF)

Hive peut également être étendu via des fonctions définies par l'utilisateur (UDF). Une fonction UDF vous permet d'implémenter une fonctionnalité ou une logique qui n'est pas facilement modelée en HiveQL. Pour obtenir un exemple d’utilisation des fonctions définies par l’utilisateur (UDF) avec Hive, consultez les documents suivants :

Exemple de données

Hive sur HDInsight est préchargé avec une table interne nommée hivesampletable. HDInsight fournit également des exemples de jeux de données pouvant être utilisés avec Hive. Ces jeux de données sont stockés dans les répertoires /example/data et /HdiSamples. Ces répertoires sont disponibles dans le stockage par défaut de votre cluster.

Exemple de requête Hive

Les instructions HiveQL suivantes projettent des colonnes sur le fichier /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;

Dans l’exemple précédent, les instructions HiveQL effectuent les opérations suivantes :

. Description
DROP TABLE Si la table existe déjà, supprimez-la.
CREATE EXTERNAL TABLE Crée une table externe dans Hive. Les tables externes stockent uniquement la définition de table dans Hive. Les données restent à l’emplacement d’origine, dans le format d’origine.
ROW FORMAT indique à Hive la façon dont les données sont mises en forme. Dans ce cas, les champs de chaque journal sont séparés par un espace.
STORED AS TEXTFILE LOCATION Indique à Hive où sont stockées les données (répertoire example/data) et qu’elles sont stockées sous forme de texte. Les données peuvent être dans un seul fichier ou réparties sur plusieurs fichiers dans le répertoire.
SELECT Sélectionne toutes les lignes où la colonne t4 contient la valeur [ERROR]. Cette instruction renvoie la valeur 3, car trois lignes contiennent cette valeur.
INPUT__FILE__NAME LIKE '%.log' Hive tente d’appliquer le schéma à tous les fichiers dans le répertoire. Dans ce cas, le répertoire contient des fichiers qui ne correspondent pas au schéma. Pour éviter que des données incorrectes n’apparaissent dans les résultats, cette instruction indique à Hive de retourner uniquement des données provenant de fichiers se terminant par .log.

Notes

Les tables externes doivent être utilisées lorsque vous vous attendez à ce que les données sous-jacentes soient mises à jour par une source externe, Par exemple, un processus de chargement de données automatisé ou une opération MapReduce.

La suppression d'une table externe ne supprime pas les données, mais seulement la définition de la table.

Pour créer une table interne plutôt qu’externe, utilisez le code HiveQL suivant :

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]';

Ces instructions effectuent les opérations suivantes :

. Description
CREATE TABLE IF NOT EXISTS Si la table n’existe pas, créez-la. Étant donné que le mot clé EXTERNAL n’est pas utilisé, cette instruction crée une table interne. La table est stockée dans l’entrepôt de données Hive et gérée intégralement par Hive.
STORED AS ORC Stocke les données dans un format ORC (Optimized Row Columnar). ORC est un format particulièrement efficace et optimisé pour le stockage de données Hive.
INSERT OVERWRITE ... SELECT Sélectionne les lignes de la log4jLogs table qui contient [ERROR], puis insère les données dans la table errorLogs .

Remarque

Contrairement aux tables externes, la suppression d’une table interne entraîne également la suppression des données sous-jacentes.

Améliorer les performances des requêtes Hive

Apache Tez

Apache Tez est une infrastructure qui permet une exécution à l'échelle beaucoup plus efficace pour les applications, telles que Hive, qui manipulent de grandes quantités de données. Tez est activé par défaut. Les documents de conception Apache Hive sur Tez contiennent des informations détaillées sur les options d’implémentation et les configurations du réglage.

Low Latency Analytical Processing (LLAP)

LLAP (parfois appelé Live Long and Process) est une nouvelle fonctionnalité de Hive 2.0 qui permet la mise en cache en mémoire des requêtes.

HDInsight fournit la fonctionnalité LLAP dans le cluster de type Interactive Query. Pour plus d’informations, consultez le document Démarrer avec Interactive Query.

Planification des requêtes Hive

Plusieurs services peuvent être utilisés pour exécuter des requêtes Hive dans le cadre d’un workflow à la demande ou planifié.

Azure Data Factory

Azure Data Factory permet d’utiliser HDInsight dans le cadre d’un pipeline Data Factory. Pour plus d’informations sur l’utilisation de Hive à partir d’un pipeline, consultez le document Transformer des données à l’aide d’une activité Hive dans Azure Data Factory.

Tâches Hive et SQL Server Integration Services

Vous pouvez utiliser les services SQL Server Integration Services (SSIS) pour exécuter un travail Hive. Le pack de fonctionnalités Azure pour SSIS fournit les composants suivants, compatibles avec les tâches Hive sur HDInsight.

Pour plus d’informations, consultez la documentation relative au Feature Pack Azure.

Apache Oozie

Apache Oozie est un workflow et un système de coordination qui gère les tâches Hadoop. Pour plus d’informations sur l’utilisation d’Oozie avec Hive, consultez le document Utiliser Apache Oozie pour définir et exécuter un workflow.

Notes

Phoenix Storage Handler pour Hive n’est pas pris en charge dans HDInsight

Étapes suivantes

Maintenant que vous connaissez Hive et que vous avez vu comment l’utiliser avec Hadoop dans HDInsight, utilisez les liens suivants pour découvrir d'autres façons d'utiliser Azure HDInsight.