Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configurazione Metastore
Un metastore Hive è una posizione centralizzata che memorizza le informazioni strutturali sulle tabelle, inclusi schemi, nomi delle partizioni e tipi di dati. Con EMR Serverless, puoi mantenere i metadati di questa tabella in un metastore che ha accesso ai tuoi lavori.
Hai due opzioni per un metastore Hive:
-
Il catalogo dati AWS Glue
-
Un metastore esterno di Apache Hive
Utilizzo del AWS Glue Data Catalog come metastore
Puoi configurare i tuoi job Spark e Hive per utilizzare il AWS Glue Data Catalog come metastore. Consigliamo questa configurazione quando hai bisogno di un metastore persistente o un metastore condiviso da diverse applicazioni, servizi o. Account AWS Per ulteriori informazioni sul Data Catalog, consulta Populating the AWS Glue Data Catalog. Per informazioni sui prezzi di AWS Glue, consulta i prezzi di AWS Glue
Puoi configurare il tuo job EMR Serverless per utilizzare il AWS Glue Data Catalog nella Account AWS stessa applicazione o in un'altra Account AWS.
Configurazione del AWS Glue Data Catalog
Per configurare il Data Catalog, scegli il tipo di applicazione EMR Serverless che desideri utilizzare.
Configurare l'accesso tra account per EMR Serverless e AWS Glue Data Catalog
Per configurare l'accesso tra più account per EMR Serverless, devi prima accedere a quanto segue: Account AWS
-
AccountA
— E Account AWS dove hai creato un'applicazione EMR Serverless. -
AccountB
— Un Account AWS che contiene un AWS Glue Data Catalog a cui desideri che i tuoi job EMR Serverless eseguano accedano.
-
Assicurati che un amministratore o un'altra identità autorizzata
AccountB
alleghi una politica delle risorse al Data Catalog in.AccountB
Questa politica concede autorizzazioniAccountA
specifiche per diversi account per eseguire operazioni sulle risorse del catalogo.AccountB
{ "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"] } ] } -
Aggiungi una IAM policy al ruolo EMR Serverless Job Runtime in
AccountA
modo che tale ruolo possa accedere alle risorse del Data Catalog in.AccountB
{ "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"] } ] } -
Inizia il tuo job run. Questo passaggio è leggermente diverso a seconda
AccountA
del tipo di applicazione EMR Serverless.
Considerazioni sull'utilizzo del AWS Glue Data Catalog
Puoi aggiungere elementi ausiliari ADD JAR
negli JARs script di Hive. Per ulteriori considerazioni, consulta Considerazioni sull'utilizzo di AWS Glue Data Catalog.
Utilizzo di un metastore Hive esterno
Puoi configurare i job EMR Serverless Spark e Hive per connetterti a un metastore Hive esterno, come Amazon Aurora o Amazon for My. RDS SQL Questa sezione descrive come configurare un metastore Amazon RDS Hive, configurare e configurare i VPC job EMR Serverless per utilizzare un metastore esterno.
Crea un metastore Hive esterno
-
Crea un Amazon Virtual Private Cloud (AmazonVPC) con sottoreti private seguendo le istruzioni in Crea un. VPC
-
Crea la tua applicazione EMR Serverless con le tue nuove sottoreti Amazon VPC e private. Quando configuri un'applicazione EMR Serverless con aVPC, effettua innanzitutto il provisioning di un'interfaccia di rete elastica per ogni sottorete specificata. Quindi collega il gruppo di sicurezza specificato a quell'interfaccia di rete. Ciò consente il controllo dell'accesso all'applicazione. Per ulteriori dettagli su come configurare il tuoVPC, consultaConfigurazione dell'accesso VPC.
-
Crea un SQL database My SQL o Aurora Postgre in una sottorete privata in Amazon. VPC Per informazioni su come creare un RDS database Amazon, consulta Creazione di un'istanza Amazon RDS DB.
-
Modifica il gruppo di sicurezza del tuo database My SQL o Aurora per consentire JDBC le connessioni dal tuo gruppo di sicurezza EMR Serverless seguendo i passaggi descritti in Modificare un'istanza Amazon RDS DB. Aggiungi una regola per il traffico in entrata al gruppo di RDS sicurezza da uno dei tuoi EMR gruppi di sicurezza Serverless.
Tipo Protocollo Intervallo porte Origine Tutti TCP
TCP
3306
emr-serverless-security-group
Configura le opzioni Spark
Usando JDBC
Per configurare la tua applicazione EMR Serverless Spark per connettersi a un metastore Hive basato su un'istanza Amazon for My RDS o Amazon SQL Aurora My, usa una connessione. SQL JDBC Inserisci i parametri del mariadb-connector-java.jar
--jars
job run. spark-submit
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/" } } }'
Il seguente esempio di codice è uno script entrypoint Spark che interagisce con un metastore Hive su 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()
Utilizzo del servizio Thrift
Puoi configurare la tua applicazione EMR Serverless Hive per connettersi a un metastore Hive basato su un'istanza Amazon for My RDS o Amazon SQL Aurora My. SQL A tale scopo, esegui un server Thrift sul nodo master di un EMR cluster Amazon esistente. Questa opzione è ideale se disponi già di un EMR cluster Amazon con un server Thrift che desideri utilizzare per semplificare le configurazioni dei processi EMR Serverless.
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/" } } }'
Il seguente esempio di codice è uno script entrypoint (thriftscript.py
) che utilizza il protocollo thrift per connettersi a un metastore Hive. Nota che la hive.metastore.uris
proprietà deve essere impostata per la lettura da un metastore Hive esterno.
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()
Configura le opzioni Hive
Usando JDBC
Se desideri specificare una posizione di database Hive esterna su un'istanza Amazon RDS My SQL o Amazon Aurora, puoi sovrascrivere la configurazione predefinita del metastore.
Nota
In Hive, puoi eseguire più scritture su tabelle metastore contemporaneamente. Se condividete le informazioni sui metastore tra due job, assicuratevi di non scrivere contemporaneamente sulla stessa tabella di metastore a meno che non scriviate su partizioni diverse della stessa tabella di metastore.
Imposta le seguenti configurazioni nella classificazione per attivare il metastore Hive esternohive-site
.
{ "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
" } }
Utilizzo di un server parsimonioso
Puoi configurare la tua applicazione EMR Serverless Hive per connettersi a un metastore Hive basato su Amazon for My RDS o Amazon Aurora M. SQL ySQLinstance A tale scopo, esegui un server Thrift sul nodo principale di un EMR cluster Amazon esistente. Questa opzione è ideale se disponi già di un EMR cluster Amazon che esegue un server Thrift e desideri utilizzare le configurazioni di lavoro EMR Serverless.
Imposta le seguenti configurazioni nella hive-site
classificazione in modo che EMR Serverless possa accedere al thrift metastore remoto. Nota che devi impostare la hive.metastore.uris
proprietà per leggere da un metastore Hive esterno.
{ "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
" } }
Considerazioni sull'utilizzo di un metastore esterno
-
Puoi configurare database compatibili con JDBC MariadB come metastore. Esempi di questi database sono RDS per MariadB, SQL My e Amazon Aurora.
-
I metastore non vengono inizializzati automaticamente. Se il tuo metastore non è inizializzato con uno schema per la tua versione di Hive, usa lo strumento Hive Schema.
-
EMRServerless non supporta l'autenticazione Kerberos. Non è possibile utilizzare un server metastore Thrift con autenticazione Kerberos con i job Serverless Spark o Hive. EMR