Comment puis-je utiliser Hive et Spark sur Amazon EMR pour interroger un catalogue de données AWS Glue qui se trouve dans un autre compte AWS ?

Dernière mise à jour : 31/08/2020

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

Dans vos configurations Hive et Spark, ajoutez la propriété "aws.glue.catalog.separator": "/". Vous pouvez configurer cette propriété sur un nouveau cluster ou sur un cluster en cours d'exécution.

Remarque : cette solution est valide sur les versions 5.28.0 et ultérieures d'Amazon EMR. Le cluster EMR et le catalogue de données AWS Glue doivent se trouver dans la même région.

Solution

Configurez l'accès entre comptes à AWS Glue, si vous ne l'avez pas déjà fait. Assurez-vous que le compartiment Amazon Simple Storage Service (Amazon S3) vers lequel pointent les tables AWS Glue est configuré pour l'accès entre comptes. Pour plus d'informations, consultez Comment configurer l'accès entre comptes pour EMRFS ?

Ensuite, affectez à la propriété aws.glue.catalog.separator la valeur / pour Hive et Spark :

Sur un nouveau cluster

Ajoutez un objet de configuration similaire à ce qui suit lorsque vous lancez un cluster :

[
    {
        "Classification": "hive-site",
        "Properties": {
            "aws.glue.catalog.separator": "/"
        }
    },
    {
        "Classification": "spark-hive-site",
        "Properties": {
            "aws.glue.catalog.separator": "/"
        }
    }    
]

Sur un cluster en cours d'exécution

  1. Ouvrez la console Amazon EMR.
  2. Dans la liste des clusters, choisissez le cluster actif à reconfigurer sous Name (Nom).
  3. Ouvrez la page des informations du cluster et choisissez l'onglet Configurations.
  4. Dans la liste déroulante Filter(Filtrer), sélectionnez le groupe d'instances à reconfigurer.
  5. Dans la liste déroulante Reconfigurer choisissez Modifier dans le tableau.
  6. Dans le tableau de classification de configuration, choisissez Add configuration (Ajouter une configuration), puis entrez ce qui suit :
    Pour Classification: hive-site
    Pour Property (Propriété) : aws.glue.catalog.separator
    Pour Value (Valeur) : /

    Pour Classification: spike-hive-site
    Pour Property (Propriété) : aws.glue.catalog.separator
    Pour Value (Valeur) : /
  7. Sélectionnez Apply this configuration to all active instance groups (Appliquer cette configuration à tous les groupes d'instances actifs), puis choisissez Save changes (Enregistrer les modifications).

Interroger les tables dans l'autre compte AWS

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 :

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()

Vous pouvez également passer le paramètre à l'aide de l'option --conf dans le script spark-submit ou en tant que commande shell de bloc-notes. Exemple :

pyspark --conf spark.hadoop.aws.glue.catalog.separator="/"

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


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