Comment utiliser Hive et Spark sur Amazon EMR pour interroger un catalogue de données AWS Glue se trouvant sur un autre compte AWS ?

Dernière mise à jour : 24/01/2023

Je veux accéder au catalogue de données AWS Glue d'un autre compte et l'interroger en utilisant Apache Hive et Apache Spark dans Amazon EMR.

Brève description

Vous pouvez accéder dynamiquement au catalogue de données dans différents comptes en spécifiant la propriété aws.glue.catalog.separator dans vos configurations Hive ou Spark. En outre, vous pouvez accéder à un catalogue de données spécifique dans un autre compte en spécifiant la propriété hive.metastore.glue.catalogid dans vos configurations Hive ou Spark.

Résolution

Si vous n'avez pas accordé d'accès inter-comptes à AWS Glue, suivez les étapes de la section Autoriser l'accès inter-comptes pour le configurer. Assurez-vous que le compartiment Amazon Simple Storage Service (Amazon S3) vers lequel pointent les tables AWS Glue est configuré pour l'accès inter-comptes. Pour de plus amples informations, consultez la section Comment configurer l'accès inter-compte pour Amazon EMRFS ?

Accédez dynamiquement au catalogue de données dans différents comptes

Appliquer les modifications de configuration à un nouveau cluster

Lorsque vous lancez un cluster EMR, ajoutez un objet de configuration similaire à l'objet suivant. Pour de plus amples informations, consultez la section Configuration des applications lors de la création d'un cluster.

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

Appliquez les modifications de configuration à un cluster en cours

  1. Ouvrez la console Amazon EMR.
  2. Dans la liste des clusters, sous ID de cluster, choisissez le cluster actif que vous souhaitez reconfigurer.
  3. Sur la page de détails du cluster, sélectionnez l'onglet Applications.
  4. Sur la page de détails des applications, faites défiler l'écran vers le bas jusqu'à Configurations des groupes d'instances.
  5. Sélectionnez le groupe d'instances, puis choisissez Reconfigurer.
  6. Dans l'écran suivant, choisissez Ajouter une nouvelle configuration, puis saisissez les informations suivantes :
    Pour Classification: hive-site
    Pour Property (Propriété) : aws.glue.catalog.separator
    Pour Value (Valeur) : /
    Pour Classification: hive-site
    Pour la propriété : hive.metastore.client.factory.class
    Pour la valeur : com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveclientFactory
    Pour Classification: spike-hive-site
    Pour Property (Propriété) : aws.glue.catalog.separator
    Pour Value (Valeur) : /
    Pour Classification: spike-hive-site
    Pour la propriété : hive.metastore.client.factory.class
    Pour la valeur : com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveclientFactory
  7. Cochez Appliquer cette configuration à tous les groupes d'instances actifs, puis choisissez Enregistrer les modifications. Pour plus d'informations, consultez Reconfiguration d'un groupe d'instances dans un cluster en cours d'exécution.

Tables de requêtes dans un autre compte AWS

Remarque : Dans Amazon EMR 6.5, transmettez la propriété de configuration spark.sql.catalogImplementation=HIVE lors de l'exécution de tâches Spark. Pour plus d'informations, consultez la section Chargement dynamique des propriétés Spark dans la documentation d'Apache Spark.

Pour interroger une table qui se trouve dans un autre compte AWS, spécifiez le numéro de compte dans la requête. Le numéro de compte est l'ID de catalogue. Par exemple, pour interroger demodb.tab1 dans le compte 111122223333 dans Hive, exécutez la commande suivante :

SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;

Exemple Spark (exécutez ceci dans le script spark-submit ou en tant que commande shell de bloc-notes) :

spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()

Vous pouvez également joindre des tables dans deux catalogues.

Exemple Hive :

SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2

Exemple Spark (exécutez ceci dans le script spark-submit ou en tant que commande shell de bloc-notes) :

spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()

Accéder à un catalogue de données spécifique dans un autre compte

Appliquer les modifications de configuration à un nouveau cluster

Lorsque vous lancez un cluster EMR, ajoutez un objet de configuration similaire à l'objet suivant. Pour de plus amples informations, consultez la section Configuration des applications lors de la création d'un cluster.

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

Appliquez les modifications de configuration à un cluster en cours

  1. Ouvrez la console Amazon EMR.
  2. Dans la liste des clusters, sous ID de cluster, choisissez le cluster actif que vous souhaitez reconfigurer.
  3. Sur la page de détails du cluster, sélectionnez l'onglet Applications.
  4. Sur la page de détails des applications, faites défiler l'écran vers le bas jusqu'à Configurations des groupes d'instances.
  5. Sélectionnez le groupe d'instances, puis choisissez Reconfigurer
  6. Dans l'écran suivant, choisissez Ajouter une nouvelle configuration, puis saisissez les informations suivantes :
    Pour Classification: hive-site
    Pour la propriété : hive.metastore.glue.catalogid
    Pour la valeur : account-id
    Pour Classification: hive-site
    Pour la propriété : hive.metastore.client.factory.class
    Pour la valeur : com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveclientFactory
    Pour Classification: spike-hive-site
    Pour la propriété : hive.metastore.glue.catalogid
    Pour la valeur : account-id
    Pour Classification: spike-hive-site
    Pour la propriété : hive.metastore.client.factory.class
    Pour la valeur : com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveclientFactory
  7. Cochez Appliquer cette configuration à tous les groupes d'instances actifs, puis choisissez Enregistrer les modifications. Pour de plus amples informations, consultez Reconfigurer un groupe d'instances dans un cluster en cours d'exécution.

Tables de requêtes dans un autre compte AWS

Pour interroger les tables stockées dans le catalogue de données AWS Glue spécifié, vous pouvez exécuter les commandes suivantes. Par exemple, pour interroger demodb.tab1 :

Dans Hive, exécutez la commande suivante :

SELECT * FROM `demodb.tab1` LIMIT 5;

Exemple Spark (exécutez ceci dans le script spark-submit ou en tant que commande shell de bloc-notes) :

spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?