Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Un metaalmacén de Hive es una ubicación centralizada que almacena información estructural sobre las tablas, incluidos los esquemas, los nombres de las particiones y los tipos de datos. Con EMR sin servidor, puede conservar los metadatos de esta tabla en un metaalmacén que tenga acceso a sus trabajos.
Dispone de dos opciones para un metaalmacén de Hive:
Puedes configurar tus trabajos de Spark y Hive para que usen el catálogo de datos de AWS Glue como metaalmacén. Recomendamos esta configuración cuando se necesita un metaalmacén persistente o un metaalmacén compartido por diferentes servicios, aplicaciones o Cuentas de AWS. Para obtener más información sobre el catálogo de datos, consulte Rellenar el catálogo de datos de AWS Glue. Para obtener información sobre los precios de AWS Glue, consulta los precios de AWS Glue.
Puede configurar su trabajo EMR Serverless para que utilice el catálogo de datos de AWS Glue en la Cuenta de AWS misma aplicación o en una diferente. Cuenta de AWS
Para configurar el catálogo de datos, elija el tipo de aplicación EMR sin servidor que desee utilizar.
- Spark
-
Cuando utilizas EMR Studio para ejecutar tus trabajos con aplicaciones EMR Serverless Spark, el catálogo de datos de AWS Glue es el metabastore predeterminado.
Cuando usa SDKs o AWS CLI, puede establecer la spark.hadoop.hive.metastore.client.factory.class
configuración com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
en los sparkSubmit
parámetros de la ejecución de su trabajo. En el siguiente ejemplo se muestra cómo configurar el catálogo de datos con la 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"
}
}'
Como alternativa, puede establecer esta configuración al crear una nueva SparkSession
en su código de 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
-
Para las aplicaciones EMR sin servidor Hive, el catálogo de datos es el metaalmacén predeterminado. Es decir, cuando ejecuta trabajos en una aplicación EMR Serverless Hive, Hive registra la información del metaalmacén en el catálogo de datos al igual que su aplicación. Cuenta de AWS No necesita una nube privada virtual (VPC) para usar el catálogo de datos como metaalmacén.
Para acceder a las tablas del metaalmacén de Hive, añade las políticas de AWS Glue necesarias que se describen en Configuración de los permisos de IAM para Glue. AWS
Para configurar el acceso multicuenta para EMR Serverless, primero debe iniciar sesión en lo siguiente: Cuentas de AWS
-
AccountA
— Y Cuenta de AWS donde ha creado una aplicación EMR Serverless.
-
AccountB
— Y Cuenta de AWS que contiene un catálogo de datos de AWS Glue al que desea que accedan sus trabajos de EMR Serverless.
-
Asegúrese de que un administrador u otra identidad autorizada en la AccountB
adjunte una política de recursos al catálogo de datos en la AccountB
. Esta política otorga permisos específicos entre cuentas de AccountA
para realizar operaciones con los recursos del catálogo de AccountB
.
- JSON
-
-
{
"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:*:123456789012:catalog"
],
"Sid": "AllowGLUEGetdatabase"
}
]
}
-
Agregue una política de IAM a rol de tiempo de ejecución del trabajo de EMR sin servidor en AccountA
para que este rol pueda acceder a los recursos del catálogo de datos en AccountB
.
- JSON
-
-
{
"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:*:123456789012:catalog"
],
"Sid": "AllowGLUEGetdatabase"
}
]
}
-
Inicio de su ejecución de trabajo. Este paso es ligeramente diferente según el tipo de aplicación EMR sin servidor de la AccountA
.
- Spark
-
Pase la spark.hadoop.hive.metastore.glue.catalogid
propiedad sparkSubmitParameters
como se muestra en el siguiente ejemplo. Sustituya AccountB-catalog-id
por el ID del catálogo de datos en AccountB
.
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/test.py",
"sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.hadoop.hive.metastore.glue.catalogid=AccountB-catalog-id
--conf spark.executor.cores=1 --conf spark.executor.memory=1g --conf spark.driver.cores=1 --conf spark.driver.memory=1g --conf spark.executor.instances=1"
}
}' \
--configuration-overrides '{
"monitoringConfiguration": {
"s3MonitoringConfiguration": {
"logUri": "s3://amzn-s3-demo-bucket
/logs/"
}
}
}'
- Hive
-
Establezca la propiedad hive.metastore.glue.catalogid
en la clasificación hive-site
, tal y como se muestra en el siguiente ejemplo. Sustituya AccountB-catalog-id
por el ID del catálogo de datos en AccountB
.
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
"
}
}]
}'
Puede añadir un elemento auxiliar JARs ADD JAR
en sus scripts de Hive. Para obtener información adicional, consulte Consideraciones a la hora de utilizar AWS Glue Data Catalog.