Configuration du métastore pour Serverless EMR - 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.

Configuration du métastore pour Serverless EMR

Un métastore Hive est un emplacement centralisé qui stocke les informations structurelles relatives à vos tables, notamment les schémas, les noms de partitions et les types de données. Avec EMR Serverless, vous pouvez conserver les métadonnées de cette table dans un métastore ayant accès à vos tâches.

Deux options s'offrent à vous pour créer un métastore Hive :

  • Le catalogue AWS de données Glue

  • Un métastore Apache Hive externe

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

Vous pouvez configurer vos tâches Spark et Hive pour utiliser le catalogue de données AWS Glue comme métastore. Nous recommandons cette configuration lorsque vous avez besoin d'un métastore persistant ou d'un métastore partagé par différentes applications, services ou. Comptes AWS Pour plus d'informations sur le catalogue de données, consultez la section Remplissage du catalogue de données AWS Glue. Pour plus d'informations sur AWS la tarification de Glue, consultez AWS la section Tarification de Glue.

Vous pouvez configurer votre tâche EMR sans serveur pour utiliser le catalogue de données AWS Glue de la même manière Compte AWS que votre application ou dans une autre Compte AWS.

Configuration du catalogue AWS de données Glue

Pour configurer le catalogue de données, choisissez le type d'application EMR sans serveur que vous souhaitez utiliser.

Spark

Lorsque vous utilisez EMR Studio pour exécuter vos tâches avec des applications Spark EMR sans serveur, le catalogue de données AWS Glue est le métastore par défaut.

Lorsque vous utilisez SDKs ou AWS CLI, vous pouvez définir la spark.hadoop.hive.metastore.client.factory.class configuration sur com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory dans les sparkSubmit paramètres de l'exécution de votre tâche. L'exemple suivant montre comment configurer le catalogue de données avec AWS CLI.

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket/code/pyspark/extreme_weather.py", "sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.driver.cores=1 --conf spark.driver.memory=3g --conf spark.executor.cores=4 --conf spark.executor.memory=3g" } }'

Vous pouvez également définir cette configuration lorsque vous créez une nouvelle configuration SparkSession dans votre code Spark.

from pyspark.sql import SparkSession spark = ( SparkSession.builder.appName("SparkSQL") .config( "spark.hadoop.hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", ) .enableHiveSupport() .getOrCreate() ) # we can query tables with SparkSQL spark.sql("SHOW TABLES").show() # we can also them with native Spark print(spark.catalog.listTables())
Hive

Pour les applications Hive EMR sans serveur, le catalogue de données est le métastore par défaut. En d'autres termes, lorsque vous exécutez des tâches sur une application Hive EMR sans serveur, Hive enregistre les informations du métastore dans le catalogue de données, au même titre que votre application. Compte AWS Vous n'avez pas besoin d'un cloud privé virtuel (VPC) pour utiliser le catalogue de données comme métastore.

Pour accéder aux tables du métastore Hive, ajoutez les politiques AWS Glue requises décrites dans la section Configuration des autorisations IAM pour Glue. AWS

Configurer l'accès entre comptes pour EMR Serverless et AWS Glue Data Catalog

Pour configurer l'accès entre comptes pour EMR Serverless, vous devez d'abord vous connecter à l'adresse suivante : Comptes AWS

  • AccountA— Et Compte AWS où vous avez créé une application EMR sans serveur.

  • AccountB— Et Compte AWS qui contient un catalogue de données AWS Glue auquel vous souhaitez que votre tâche EMR sans serveur puisse accéder.

  1. Assurez-vous qu'un administrateur ou une autre identité autorisée AccountB attache une politique de ressources au catalogue de données dansAccountB. Cette politique accorde AccountA des autorisations spécifiques entre comptes pour effectuer des opérations sur les ressources du AccountB catalogue.

    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal": { "AWS": [ "arn:aws:iam::accountA:role/job-runtime-role-A" ]}, "Action" : [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetDataBases", "glue:CreateTable", "glue:GetTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTables", "glue:GetPartition", "glue:GetPartitions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:GetUserDefinedFunctions" ], "Resource": ["arn:aws:glue:region:AccountB:catalog"] } ] }
  2. Ajoutez une IAM politique au rôle d'exécution des tâches EMR sans serveur AccountA afin que ce rôle puisse accéder aux ressources du catalogue de données dansAccountB.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetDataBases", "glue:CreateTable", "glue:GetTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTables", "glue:GetPartition", "glue:GetPartitions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:GetUserDefinedFunctions" ], "Resource": ["arn:aws:glue:region:AccountB:catalog"] } ] }
  3. Commencez à exécuter votre tâche. Cette étape est légèrement différente selon le type AccountA d'application EMR Serverless.

    Spark

    Définissez la spark.hadoop.hive.metastore.glue.catalogid propriété dans la hive-site classification comme indiqué dans l'exemple suivant. Remplacez AccountB-catalog-id par l'ID du catalogue de données dansAccountB.

    aws emr-serverless start-job-run \ --application-id "application-id" \ --execution-role-arn "job-role-arn" \ --job-driver '{ "sparkSubmit": { "query": "s3://amzn-s3-demo-bucket/hive/scripts/create_table.sql", "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket/hive/warehouse" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "spark.hadoop.hive.metastore.glue.catalogid": "AccountB-catalog-id" } }] }'
    Hive

    Définissez la hive.metastore.glue.catalogid propriété dans la hive-site classification comme indiqué dans l'exemple suivant. Remplacez AccountB-catalog-id par l'ID du catalogue de données dansAccountB.

    aws emr-serverless start-job-run \ --application-id "application-id" \ --execution-role-arn "job-role-arn" \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/hive/scripts/create_table.sql", "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket/hive/warehouse" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "hive.metastore.glue.catalogid": "AccountB-catalog-id" } }] }'

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

Vous pouvez ajouter JARs un auxiliaire ADD JAR dans vos scripts Hive. Pour plus d'informations, consultez la section Considérations relatives à l'utilisation de AWS Glue Data Catalog.