Utilisation du catalogue de données AWS Glue comme métastore pour Hive - Amazon EMR

Utilisation du catalogue de données AWS Glue comme métastore pour Hive

Avec Amazon EMR version 5.8.0 ou ultérieure, vous pouvez configurer Hive pour qu'il utilise le catalogue de données AWS Glue comme métastore. Cette configuration est recommandée si vous avez besoin d'un metastore persistant ou d'un metastore partagé par différents clusters, services, applications ou comptes AWS.

AWS Glue est un service d'extraction, transformation et chargement (ETL) entièrement géré qui facilite et rend abordable le classement par catégorie, le nettoyage, l'enrichissement et le déplacement des données de manière fiable entre différentes banques de données. Le catalogue de données AWS Glue fournit un référentiel de métadonnées unifié pour une variété de sources et de formats de données, s'intégrant à Amazon EMR ainsi qu'à Amazon RDS, Amazon Redshift, Redshift Spectrum, Athena, et toute application compatible avec le métastore Apache Hive. AWS Les crawlers Glue peuvent automatiquement déduire les schémas des données sources dans Amazon S3 et stocker les métadonnées associées dans le catalogue de données. Pour plus d'informations sur le catalogue de données, consultez Remplissage du catalogue de données AWS Glue dans le Guide du développeur AWS Glue.

Des frais distincts s'appliquent pour AWS Glue. Il y a un tarif mensuel pour le stockage et l'accès aux métadonnées dans le catalogue de données, un tarif horaire facturé à la minute pour les tâches ETL d'AWS Glue et le temps d'exécution des crawlers, et un tarif horaire facturé à la minute pour chaque point de terminaison de développement provisionné. Le catalogue de données vous permet de stocker jusqu'à un million d'objets sans aucuns frais. Au-delà d'un million d'objets, des frais de 1 USD vous seront facturés tous les 100 000 objets. Dans le catalogue de données, sont considérés comme des objets une table, une partition ou une base de données. Pour de plus amples informations, consultez Tarification Glue.

Important

Si vous avez créé des tables à l'aide d'Amazon Athena ou d'Amazon Redshift Spectrum avant le 14 août 2017, les bases de données et les tables sont stockées dans un catalogue géré par Athena, qui est distinct du catalogue de données AWS Glue. Pour intégrer Amazon EMR à ces tables, vous devez mettre à niveau vers le catalogue de données AWS Glue. Pour plus d'informations, consultez Mise à niveau vers le catalogue de données AWS Glue dans le Guide de l'utilisateur Amazon Athena.

Spécifier le catalogue de données AWS Glue en tant que métastore

Vous pouvez spécifier le catalogue de données AWS Glue comme métastore à l'aide de la AWS Management Console, de l'AWS CLI ou de l'API Amazon EMR. Lorsque vous utilisez la CLI ou l'API, vous utilisez la classification de configuration de Hive pour spécifier le catalogue de données. En outre, avec Amazon EMR 5.16.0 et les versions ultérieures, vous pouvez utiliser la classification de configuration pour spécifier un catalogue de données dans un Compte AWS différent. Lorsque vous utilisez la console, vous pouvez spécifier le catalogue de données à l'aide des Options avancées ou des Options rapides.

New console
Pour spécifier le catalogue de données AWS Glue comme métastore Hive dans la nouvelle console
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon EMR à l'adresse https://console.aws.amazon.com/emr.

  2. Sous EMR sur EC2 dans le volet de navigation de gauche, choisissez Clusters, puis Créer un cluster.

  3. Sous Solution groupée d'application, choisissez Core Hadoop, HBase ou Custom. Si vous personnalisez votre cluster, assurez-vous de sélectionner Hive ou HCatalog comme l'une de vos applications.

  4. Sous Paramètres du catalogue de données AWS Glue, cochez la case Utiliser les métadonnées des tables Hive.

  5. Choisissez toutes les autres options qui s'appliquent à votre cluster.

  6. Pour lancer votre cluster, choisissez Créer le cluster.

Old console
Pour spécifier le catalogue de données AWS Glue comme métastore Hive avec l'ancienne console
  1. Accédez à la nouvelle console Amazon EMR et sélectionnez Basculer vers l'ancienne console depuis le menu latéral. Pour plus d'informations sur ce qui vous attend lorsque vous passez à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.

  2. Choisissez Créer un cluster et Go to advanced options (Aller aux options avancées).

  3. Pour Version, choisissez emr-5.8.0 ou ultérieure.

  4. Sous Version, sélectionnez Hive ou HCatalog.

  5. Sous Paramètres du catalogue de données AWS Glue, sélectionnez Utiliser pour les métadonnées de table Hive.

  6. Choisissez d'autres options appropriées selon votre cluster, choisissez Suivant, puis configurez d'autres options de cluster selon votre application.

CLI
Pour spécifier le catalogue de données AWS Glue comme métastore Hive avec l'AWS CLI

Pour plus d'informations sur la spécification d'une classifications de configuration à l'aide de l'AWS CLI et de l'API EMR, consultez Configuration des applications.

  • Spécifiez la valeur de hive.metastore.client.factory.class à l'aide de la classification de configuration hive-site comme illustré dans l'exemple suivant :

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } } ]

    Sur les versions EMR 5.28.0, 5.28.1, 5.29.0 ou 6.x, si vous créez un cluster utilisant le catalogue de données AWS Glue comme métastore, définissez hive.metastore.schema.verification sur false. Cela empêche Hive et HCatalog de valider le schéma de métastore par rapport à MySQL. Sans cette configuration, le groupe d'instances principales sera suspendu après la reconfiguration sur Hive ou HCatalog.

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.schema.verification": "false" } } ]

    Si vous disposez déjà d'un cluster sur EMR version 5.28.0, 5.28.1 ou 5.29.0, vous pouvez définir le groupe d'instances maître hive.metastore.schema.verification sur false avec les informations suivantes :

    Classification = hive-site Property = hive.metastore.schema.verification Value = false

    Pour spécifier un catalogue de données dans un différent compte AWS, ajoutez la propriété hive.metastore.glue.catalogid, tel qu'illustré dans l'exemple JSON suivant. Remplacez acct-id par le compte AWS du catalogue de données.

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.schema.verification": "false", "hive.metastore.glue.catalogid": "acct-id" } } ]

Autorisations IAM

Le profil d'instance EC2 pour un cluster doit avoir des autorisations IAM pour les actions AWS Glue. En outre, si vous activez le chiffrement pour les objets du catalogue de données AWS Glue, le rôle doit également être autorisé à chiffrer, déchiffrer et générer la AWS KMS key utilisée pour le chiffrement.

Autorisations pour les actions AWS Glue

Aucune action n'est requise si vous utilisez le profil d'instance EC2 par défaut pour Amazon EMR. La politique gérée par AmazonElasticMapReduceforEC2Role qui est attachée à EMR_EC2_DefaultRole autorise toutes les actions nécessaires à AWS Glue. Toutefois, si vous spécifiez un profil d'instance et des autorisations EC2 personnalisés, vous devez configurer les actions AWS Glue appropriées. Utilisez la stratégie gérée AmazonElasticMapReduceforEC2Role comme point de départ. Pour plus d'informations, consultez Rôle de service pour les instances EC2 de cluster (profil d'instance EC2) dans le Guide de gestion Amazon EMR.

Autorisations de chiffrement et de déchiffrement du catalogue de données AWS Glue

Votre profil d'instance a besoin d'autorisations pour chiffrer et déchiffrer les données au moyen de votre clé. Vous n'avez pas besoin de configurer ces autorisations si les deux déclarations suivantes s'appliquent :

  • Vous activez le chiffrement des objets du catalogue de données AWS Glue à l'aide des clés gérées pour AWS Glue.

  • Vous utilisez un cluster Compte AWS identique au catalogue de données AWS Glue.

Sinon, vous devez ajouter l'instruction suivante à la politique d'autorisations attachée à votre profil d'instance EC2.

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

Pour plus d'informations sur le chiffrement du catalogue de données AWS Glue, consultez Chiffrement de votre catalogue de données dans le Guide du développeur AWS Glue.

Autorisations basées sur les ressources

Si vous utilisez AWS Glue en conjonction avec Hive, Spark ou Presto dans Amazon EMR, AWS Glue prend en charge les politiques basées sur les ressources pour contrôler l'accès aux ressources du catalogue de données. Ces ressources comprennent les bases de données, les tables, les connexions et les fonctions définies par l'utilisateur. Pour plus d'informations, consultez Politiques de ressources AWS Glue dans le Guide du développeur AWS Glue.

Lorsque vous utilisez des politiques basées sur les ressources pour limiter l'accès à AWS Glue depuis Amazon EMR, le principal que vous spécifiez dans la politique d'autorisations doit être l'ARN de rôle associé au profil d'instance EC2 qui est spécifié lors de la création d'un cluster. Par exemple, pour une politique basée sur les ressources attachée à un catalogue, vous pouvez spécifier l'ARN de rôle pour le rôle de service par défaut des instances EC2 de cluster, EMR_EC2_DefaultRole en tant que Principal, en utilisant le format indiqué dans l'exemple suivant :

arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole

L'acct-id peut être différent de l'ID de compte AWS Glue. Cela permet d'accéder aux clusters EMR à partir de comptes différents. Vous pouvez spécifier plusieurs principaux, chacun provenant d'un compte différent.

Considérations relatives à l'utilisation du catalogue de données AWS Glue

Tenez compte des éléments suivants lorsque vous utilisez le catalogue de données AWS Glue comme métastore avec Hive :

  • L'ajout de JAR auxiliaires à l'aide du shell Hive n'est pas pris en charge. Pour contourner ce problème, utilisez la classification de configuration hive-site pour définir la propriété hive.aux.jars.path, qui ajoute des JAR auxiliaires dans le chemin de classe Hive.

  • Les transactions Hive ne sont pas prises en charge.

  • Renommer des tables à partir d'AWS Glue n'est pas pris en charge.

  • Lorsque vous créez une table Hive sans spécifier de LOCATION, les données de la table sont stockées à l'emplacement spécifié par la propriété hive.metastore.warehouse.dir. Par défaut, il s'agit d'un emplacement dans HDFS. Si un autre cluster doit accéder à la table, il échoue, sauf s'il dispose d'autorisations adéquates sur le cluster qui a créé la table. En outre, le stockage dans HDFS étant transitoire, si le cluster est résilié, les données de la table sont perdues et la table doit être recréée. Nous vous recommandons de spécifier un LOCATION dans Amazon S3 lorsque vous créez une table Hive à l'aide d'AWS Glue. Vous pouvez également utiliser la classification de configuration hive-site pour spécifier un emplacement dans Amazon S3 pour hive.metastore.warehouse.dir, qui s'applique à toutes les tables Hive. Si une table est créée dans un emplacement HDFS et que le cluster qui l'a créée est toujours en cours d'exécution, vous pouvez mettre à jour l'emplacement de la table vers Amazon S3 depuis AWS Glue. Pour plus d'informations, consultez Utilisation des tables dans la console AWS Glue dans le Guide du développeur AWS Glue.

  • Les valeurs de partition contenant des guillemets et des apostrophes ne sont pas prises en charge, par exemple PARTITION (owner="Doe's")..

  • Les statistiques sur les colonnes sont prises en charge à partir de la version emr-5.31.0.

  • L'utilisation de l'autorisation Hive n'est pas prise en charge. Comme alternative, envisagez d'utiliser les politiques basées sur les ressources AWS Glue. Pour plus d'informations, consultez Utilisation de politiques basées sur des ressources pour l'accès d'Amazon EMR au catalogue de données AWS Glue.

  • Les contraintes Hive ne sont pas prises en charge.

  • L'optimisation basée sur les coûts dans Hive n'est pas prise en charge.

  • Le paramètre hive.metastore.partition.inherit.table.properties n'est pas pris en charge.

  • L'utilisation des constantes de métastore suivantes n'est pas prise en charge : BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION.

  • Lorsque vous utilisez une expression de prédicat, les valeurs explicites doivent se trouver sur le côté droit de l'opérateur de comparaison, sinon les requêtes risquent d'échouer.

    • Correct : SELECT * FROM mytable WHERE time > 11

    • Incorrect : SELECT * FROM mytable WHERE 11 > time

  • Les versions 5.32.0 et 6.3.0 et ultérieures d'Amazon EMR prennent en charge l'utilisation de fonctions définies par l'utilisateur (UDF) dans les expressions de prédicat. Lorsque vous utilisez des versions antérieures, vos requêtes peuvent échouer en raison de la manière dont Hive essaie d'optimiser l'exécution des requêtes.

  • Les tables temporaires ne sont pas prises en charge.

  • Nous vous recommandons de créer des tableaux à l'aide d'applications via Amazon EMR plutôt que de les créer directement à l'aide d'AWS Glue. La création d'une table via AWS Glue peut entraîner l'absence de champs obligatoires et des exceptions de requête.

  • Dans EMR 5.20.0 ou version ultérieure, l'élimination parallèle des partitions est activée automatiquement pour Spark et Hive lorsque le catalogue de données AWS Glue est utilisé comme métastore. Cette modification réduit considérablement le temps de planification des requêtes en exécutant plusieurs requêtes en parallèle pour récupérer des partitions. Le nombre total de segments pouvant être exécutés simultanément est compris entre 1 et 10. La valeur par défaut est 5, ce qui est recommandé. Vous pouvez le modifier en spécifiant la propriété aws.glue.partition.num.segments dans la classification de configuration hive-site. En cas de limitation, vous pouvez désactiver la fonctionnalité en remplaçant la valeur par 1. Pour en savoir plus, consultez Structure d'un segment AWS Glue.