Quiero usar Apache Hive y Apache Spark para acceder y consultar el catálogo de datos de AWS Glue de otra cuenta de AWS en Amazon EMR.
Descripción corta
Para acceder de forma dinámica al catálogo de datos en diferentes cuentas, especifica la propiedad aws.glue.catalog.separator en las configuraciones de Hive o Spark. También puedes especificar la propiedad hive.metastore.glue.catalogid en tus configuraciones para acceder a un catálogo de datos específico en otra cuenta.
Resolución
Concede acceso entre cuentas a AWS Glue. Asegúrate de que el bucket de Amazon Simple Storage Service (Amazon S3) al que apuntan las tablas de AWS Glue esté configurado para el acceso entre cuentas. Para obtener más información, consulta ¿Cómo configuro el acceso entre cuentas para el sistema de archivos EMR?
Acceso dinámico al catálogo de datos en diferentes cuentas
Aplicación de cambios de configuración a un clúster nuevo
Al iniciar un clúster de EMR, agrega un objeto de configuración similar al del siguiente ejemplo. Para obtener más información, consulta Configuración de aplicaciones al crear un clúster.
[
{
"Classification": "hive-site",
"Properties": {
"aws.glue.catalog.separator": "/",
"hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
}
},
{
"Classification": "spark-hive-site",
"Properties": {
"aws.glue.catalog.separator": "/",
"hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
}
}
]
Aplicación de cambios de configuración a un clúster en ejecución
Sigue estos pasos:
- Abre la consola de Amazon EMR.
- En la lista de clústeres, en ID de clúster, elige el clúster activo que desees reconfigurar.
- En la página de detalles del clúster, selecciona la pestaña Aplicaciones.
- En Configuraciones de grupos de instancias, selecciona el grupo de instancias y, a continuación, elige Reconfigurar.
- Selecciona Agregar nueva configuración y, a continuación, introduce la siguiente información:
En Clasificación, introduce hive-site.
En Propiedad, introduce aws.glue.catalog.separator.
En Valor, introduce /.
En Clasificación, introduce hive-site.
En Propiedad, introduce hive.metastore.client.factory.class.
En Valor, introduce com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
En Clasificación, introduce spark-hive-site.
En Propiedad, introduce aws.glue.catalog.separator.
En Valor, introduce /.
En Clasificación, introduce spark-hive-site.
En Propiedad, introduce hive.metastore.client.factory.class.
En Valor, introduce com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
- Selecciona Aplicar esta configuración a todos los grupos de instancias activos y, a continuación, elige Guardar cambios. Para obtener más información, consulta Reconfiguración de un grupo de instancias en un clúster en ejecución.
Consultar tablas en otra cuenta
Nota: Cuando ejecutes trabajos de Spark en la versión 6.5 de Amazon EMR, transfiere la propiedad de configuración spark.sql.catalogImplementation=hive. Para obtener más información, consulta Carga dinámica de las propiedades de Spark en el sitio web de Apache Spark.
Para consultar una tabla que está en otra cuenta, especifica el número de cuenta en la consulta. El número de cuenta es el mismo que el ID del catálogo. Por ejemplo, para consultar demodb.tab1 en la cuenta 111122223333, ejecuta el siguiente comando.
Hive:
SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;
Spark:
spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()
Ejecuta el comando de Spark anterior en el script spark-submit o como un comando de shell de cuaderno.
También puedes unir tablas en dos catálogos.
Hive:
SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2
Spark:
spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()
Ejecuta el comando de Spark anterior en el script spark-submit o como un comando de shell de cuaderno.
Acceso a un catálogo de datos específico en otra cuenta
Aplicación de cambios de configuración a un clúster nuevo
Al iniciar un clúster de EMR, agrega un objeto de configuración similar al del siguiente ejemplo. Para obtener más información, consulta Configuración de aplicaciones al crear un clúster.
[
{
"Classification": "hive-site",
"Properties": {
"hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
"hive.metastore.glue.catalogid": "account-id"
}
},
{
"Classification": "spark-hive-site",
"Properties": {
"hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
"hive.metastore.glue.catalogid": "account-id"
}
}
]
Aplicación de cambios de configuración a un clúster en ejecución
Sigue estos pasos:
- Abre la consola de Amazon EMR.
- En la lista de clústeres, en ID de clúster, elige el clúster activo que desees reconfigurar.
- En la página de detalles del clúster, selecciona la pestaña Aplicaciones.
- En Configuraciones de grupos de instancias, selecciona el grupo de instancias y, a continuación, elige Reconfigurar.
- Selecciona Agregar nueva configuración y, a continuación, introduce la siguiente información:
En Clasificación, introduce hive-site.
En Propiedad, introduce hive.metastore.glue.catalogid.
En Valor, introduce account-id.
En Clasificación, introduce hive-site.
En Propiedad, introduce hive.metastore.client.factory.class.
En Valor, introduce com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
En Clasificación, introduce spark-hive-site.
En Propiedad, introduce hive.metastore.glue.catalogid.
En Valor, introduce account-id.
En Clasificación, introduce spark-hive-site.
En Propiedad, introduce hive.metastore.client.factory.class.
En Valor, introduce com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
- Consulta Aplicar esta configuración a todos los grupos de instancias activos y, a continuación, elige Guardar cambios. Para obtener más información, consulta Reconfiguración de un grupo de instancias en un clúster en ejecución.
Consultar tablas en otra cuenta
Para consultar las tablas almacenadas en el catálogo de datos especificado, ejecuta un comando similar al del ejemplo siguiente.
Hive:
SELECT * FROM `demodb.tab1` LIMIT 5;
Spark:
spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()