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
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.
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.
-
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 accordeAccountA
des autorisations spécifiques entre comptes pour effectuer des opérations sur les ressources duAccountB
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"] } ] } -
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"] } ] } -
Commencez à exécuter votre tâche. Cette étape est légèrement différente selon le type
AccountA
d'application EMR Serverless.
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.
Utilisation d'un métastore Hive externe
Vous pouvez configurer vos tâches Spark et Hive EMR sans serveur pour qu'elles se connectent à un métastore Hive externe, tel qu'Amazon Aurora ou Amazon for My. RDS SQL Cette section explique comment configurer un métastore Amazon RDS Hive, configurer votre et configurer vos VPC tâches EMR sans serveur pour utiliser un métastore externe.
Création d'un métastore Hive externe
-
Créez un Amazon Virtual Private Cloud (AmazonVPC) avec des sous-réseaux privés en suivant les instructions de la section Create a VPC.
-
Créez votre application EMR Serverless avec vos nouveaux sous-réseaux Amazon VPC et privés. Lorsque vous configurez votre application EMR Serverless avec unVPC, elle fournit d'abord une interface elastic network pour chaque sous-réseau que vous spécifiez. Il attache ensuite le groupe de sécurité que vous avez spécifié à cette interface réseau. Cela permet à votre application de contrôler l'accès. Pour plus de détails sur la configuration de votreVPC, consultezConfiguration de VPC l'accès.
-
Créez une SQL base de données My SQL ou Aurora Postgre dans un sous-réseau privé de votre Amazon. VPC Pour plus d'informations sur la création d'une RDS base de données Amazon, consultez Création d'une RDS instance de base de données Amazon.
-
Modifiez le groupe de sécurité de votre base de données My SQL ou Aurora pour autoriser JDBC les connexions depuis votre groupe de sécurité EMR Serverless en suivant les étapes de la section Modification d'une RDS instance de base de données Amazon. Ajoutez une règle pour le trafic entrant au groupe de RDS sécurité depuis l'un de vos groupes de sécurité EMR Serverless.
Type Protocole Plage de ports Source Tout TCP
TCP
3306
emr-serverless-security-group
Configuration des options Spark
En utilisant JDBC
Pour configurer votre application Spark EMR sans serveur afin qu'elle se connecte à un métastore Hive basé sur une SQL instance Amazon RDS for My ou Amazon SQL Aurora My, utilisez une connexion. JDBC Transmettez le mariadb-connector-java.jar
with --jars
dans les spark-submit
paramètres de votre exécution de tâche.
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
/scripts/spark-jdbc.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket
/mariadb-connector-java.jar --conf spark.hadoop.javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --conf spark.hadoop.javax.jdo.option.ConnectionUserName=<connection-user-name> --conf spark.hadoop.javax.jdo.option.ConnectionPassword=<connection-password> --conf spark.hadoop.javax.jdo.option.ConnectionURL=<JDBC-Connection-string> --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/spark/logs/" } } }'
L'exemple de code suivant est un script Spark entrypoint qui interagit avec un métastore Hive sur Amazon. RDS
from os.path import expanduser, join, abspath from pyspark.sql import SparkSession from pyspark.sql import Row # warehouse_location points to the default location for managed databases and tables warehouse_location = abspath('spark-warehouse') spark = SparkSession \ .builder \ .config("spark.sql.warehouse.dir", warehouse_location) \ .enableHiveSupport() \ .getOrCreate() spark.sql("SHOW DATABASES").show() spark.sql("CREATE EXTERNAL TABLE `sampledb`.`sparknyctaxi`(`dispatching_base_num` string, `pickup_datetime` string, `dropoff_datetime` string, `pulocationid` bigint, `dolocationid` bigint, `sr_flag` bigint) STORED AS PARQUET LOCATION 's3://<s3 prefix>/nyctaxi_parquet/'") spark.sql("SELECT count(*) FROM sampledb.sparknyctaxi").show() spark.stop()
Utiliser le service d'épargne
Vous pouvez configurer votre application EMR Serverless Hive pour qu'elle se connecte à un métastore Hive basé sur une instance Amazon for My RDS ou Amazon SQL Aurora My. SQL Pour ce faire, exécutez un serveur d'épargne sur le nœud principal d'un EMR cluster Amazon existant. Cette option est idéale si vous possédez déjà un EMR cluster Amazon avec un serveur d'épargne que vous souhaitez utiliser pour simplifier vos configurations de tâches EMR sans serveur.
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
/thriftscript.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket
/mariadb-connector-java.jar --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/spark/logs/" } } }'
L'exemple de code suivant est un script entrypoint (thriftscript.py
) qui utilise le protocole Thrift pour se connecter à un métastore Hive. Notez que la hive.metastore.uris
propriété doit être définie pour être lue depuis un métastore Hive externe.
from os.path import expanduser, join, abspath from pyspark.sql import SparkSession from pyspark.sql import Row # warehouse_location points to the default location for managed databases and tables warehouse_location = abspath('spark-warehouse') spark = SparkSession \ .builder \ .config("spark.sql.warehouse.dir", warehouse_location) \ .config("hive.metastore.uris","thrift://
thrift-server-host
:thift-server-port
") \ .enableHiveSupport() \ .getOrCreate() spark.sql("SHOW DATABASES").show() spark.sql("CREATE EXTERNAL TABLE sampledb.`sparknyctaxi`( `dispatching_base_num` string, `pickup_datetime` string, `dropoff_datetime` string, `pulocationid` bigint, `dolocationid` bigint, `sr_flag` bigint) STORED AS PARQUET LOCATION 's3://<s3 prefix>/nyctaxi_parquet/'") spark.sql("SELECT * FROM sampledb.sparknyctaxi").show() spark.stop()
Configurer les options Hive
En utilisant JDBC
Si vous souhaitez spécifier un emplacement de base de données Hive externe sur une instance Amazon RDS My SQL ou Amazon Aurora, vous pouvez remplacer la configuration de métastore par défaut.
Note
Dans Hive, vous pouvez effectuer plusieurs écritures dans des tables de métastore en même temps. Si vous partagez des informations de métastore entre deux jobs, assurez-vous de ne pas écrire simultanément dans la même table de métastore, sauf si vous écrivez sur des partitions différentes de la même table de métastore.
Définissez les configurations suivantes dans la hive-site
classification pour activer le métastore Hive externe.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver", "javax.jdo.option.ConnectionURL": "jdbc:mysql://
db-host
:db-port
/db-name
", "javax.jdo.option.ConnectionUserName": "username
", "javax.jdo.option.ConnectionPassword": "password
" } }
Utilisation d'un serveur d'épargne
Vous pouvez configurer votre application EMR Serverless Hive pour qu'elle se connecte à un métastore Hive basé sur Amazon for My RDS ou Amazon Aurora M. SQL ySQLinstance Pour ce faire, exécutez un serveur d'épargne sur le nœud principal d'un EMR cluster Amazon existant. Cette option est idéale si vous possédez déjà un EMR cluster Amazon qui exécute un serveur d'épargne et que vous souhaitez utiliser vos configurations de tâches EMR sans serveur.
Définissez les configurations suivantes dans la hive-site
classification afin que EMR Serverless puisse accéder à la métastore d'épargne distante. Notez que vous devez définir la hive.metastore.uris
propriété pour qu'elle puisse être lue depuis un métastore Hive externe.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "hive.metastore.uris": "thrift://
thrift-server-host
:thirft-server-port
" } }
Considérations relatives à l'utilisation d'un métastore externe
-
Vous pouvez configurer des bases de données compatibles avec MariaDB en tant que JDBC métastore. Des exemples de ces bases RDS de données concernent MariaDB, SQL My et Amazon Aurora.
-
Les métastores ne sont pas initialisés automatiquement. Si votre métastore n'est pas initialisé avec un schéma pour votre version de Hive, utilisez l'outil Hive Schema.
-
EMRServerless ne prend pas en charge l'authentification Kerberos. Vous ne pouvez pas utiliser un serveur Thrift Metastore avec une authentification Kerberos avec des tâches Spark ou Hive EMR sans serveur.