Utiliser le catalogue de données AWS Glue comme métastore pour Hive - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser le catalogue de données AWS Glue comme métastore pour Hive

À l'aide de la EMR version 5.8.0 ou ultérieure d'Amazon, vous pouvez configurer Hive pour utiliser 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, de transformation et de chargement (ETL) entièrement géré qui permet de classer vos données, de les nettoyer, de les enrichir et de les déplacer de manière fiable entre différents magasins de données de manière simple et rentable. Le catalogue de données AWS Glue fournit un référentiel de métadonnées unifié couvrant une variété de sources de données et de formats de données, s'intégrant à Amazon EMR ainsi qu'à AmazonRDS, Amazon Redshift, Redshift Spectrum, Athena et à toute application compatible avec le métastore Apache Hive. AWS Les robots d'exploration Glue peuvent automatiquement déduire un schéma à partir 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 la section Remplissage du catalogue de données AWS Glue dans le guide du développeur de AWS Glue.

Des frais distincts s'appliquent pour AWS Glue. Il existe un tarif mensuel pour le stockage et l'accès aux métadonnées du catalogue de données, un taux horaire facturé par minute pour les ETL tâches AWS Glue et le temps d'exécution du robot d'exploration, et un taux horaire facturé par 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. Si vous stockez plus d'un million d'objets, vous êtes facturé USD 1$ pour 100 000 objets de plus d'un million. 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, distinct du catalogue de données Glue. AWS Pour intégrer Amazon EMR à ces tables, vous devez passer au catalogue de données AWS Glue. Pour plus d'informations, consultez la section 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 comme métastore

Vous pouvez spécifier le catalogue de données AWS Glue comme métastore à l'aide de AWS Management Console AWS CLI, ou Amazon. EMR API Lorsque vous utilisez le CLI ouAPI, 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 versions ultérieures, vous pouvez utiliser la classification de configuration pour spécifier un catalogue de données dans un autre. Compte AWS Lorsque vous utilisez la console, vous pouvez spécifier le catalogue de données à l'aide des Options avancées ou des Options rapides.

Console
Pour spécifier AWS Glue Data Catalog comme métastore Hive avec la console
  1. Connectez-vous au et ouvrez AWS Management Console la EMR console Amazon à l'adresse https://console.aws.amazon.com/emr.

  2. Sous EMREC2Activé dans le volet de navigation de gauche, choisissez Clusters, puis Create cluster.

  3. Sous Ensemble d'applications, choisissez Core Hadoop ou HBaseCustom. 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 cluster, choisissez Créer un cluster.

CLI
Pour spécifier le catalogue de données AWS Glue en tant que métastore Hive avec AWS CLI

Pour plus d'informations sur la spécification d'une classification de configuration à l'aide du AWS CLI et EMRAPI, consultezConfiguration 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" } } ]

    Dans les EMR versions 5.28.0, 5.28.1, 5.29.0 ou 6.x, si vous créez un cluster en utilisant le catalogue de données AWS Glue comme métastore, définissez le sur. hive.metastore.schema.verification false Cela empêche Hive et HCatalog de valider le schéma du métastore par rapport à My. SQL Sans cette configuration, le groupe d'instances principal 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 dans les EMR versions 5.28.0, 5.28.1 ou 5.29.0, vous pouvez définir le groupe d'instances principal à l'aide des informations suivantes : hive.metastore.schema.verification false

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

    Pour spécifier un catalogue de données dans un autre AWS compte, ajoutez la hive.metastore.glue.catalogid propriété comme indiqué dans l'exemple 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" } } ]

IAMautorisations

Le profil d'EC2instance d'un cluster doit disposer d'IAMautorisations pour les actions AWS Glue. En outre, si vous activez le chiffrement pour les objets AWS Glue Data Catalog, le rôle doit également être autorisé à chiffrer, déchiffrer et générer les objets AWS KMS key utilisés pour le chiffrement.

Autorisations pour les actions AWS Glue

Si vous utilisez le profil d'EC2instance par défaut pour AmazonEMR, aucune action n'est requise. La politique AmazonElasticMapReduceforEC2Role gérée attachée au EMR_EC2_DefaultRole autorise toutes les actions AWS Glue nécessaires. Toutefois, si vous spécifiez un profil d'EC2instance personnalisé et des autorisations, 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 la section Rôle de service pour les EC2 instances de cluster (profil d'EC2instance) dans le guide EMR de gestion Amazon.

Autorisations pour chiffrer et déchiffrer le catalogue de données Glue AWS

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 de clés gérées pour AWS Glue.

  • Vous utilisez un cluster Compte AWS identique au AWS Glue Data Catalog.

Dans le cas contraire, vous devez ajouter l'instruction suivante à la politique d'autorisation attachée à votre profil d'EC2instance.

[ { "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 la section Chiffrer votre catalogue de données dans le guide du développeur de AWS Glue.

Autorisations basées sur les ressources

Si vous utilisez AWS Glue conjointement avec Hive, Spark ou Presto sur Amazon, EMR AWS Glue prend en charge les politiques basées sur les ressources afin de 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 AmazonEMR, le principal que vous spécifiez dans la politique d'autorisation doit être le rôle ARN associé au profil d'EC2instance 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 le rôle du rôle de service par défaut ARN pour les instances de clusterEC2, EMR_EC2_DefaultRole comme lePrincipal, en utilisant le format illustré dans l'exemple suivant :

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

Le acct-id peut être différent de l'identifiant du compte AWS Glue. Cela permet d'accéder à partir de EMR clusters appartenant à différents comptes. 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 d'un auxiliaire JARs à l'aide du shell Hive n'est pas pris en charge. Pour contourner le problème, utilisez la classification hive-site de configuration pour définir la hive.aux.jars.path propriété, qui ajoute un auxiliaire JARs au chemin de classe Hive.

  • Les transactions Hive ne sont pas prises en charge.

  • Il n'est pas possible de renommer des tables depuis AWS Glue.

  • 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 dansHDFS. 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 HDFS stockage étant transitoire, si le cluster se termine, 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 de 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 HDFS emplacement et que le cluster qui l'a créée est toujours actif, vous pouvez mettre à jour l'emplacement de la table vers Amazon S3 depuis AWS Glue. Pour plus d'informations, consultez Working with Tables on the AWS Glue Console dans le AWS Glue Developer Guide.

  • 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 Utiliser des politiques basées sur les ressources pour le catalogue de données Amazon EMR Access to 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

  • EMRLes versions 5.32.0 et 6.3.0 et ultérieures d'Amazon prennent en charge l'utilisation de fonctions définies par l'utilisateur (UDFs) 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 avec 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 la version EMR 5.20.0 ou ultérieure, l'élagage parallèle des partitions est activé automatiquement pour Spark et Hive lorsque AWS Glue Data Catalog 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.