Trabajo con una jerarquía de varios catálogos en el Catálogo de datos de AWS Glue con Spark en Amazon EMR - Amazon EMR

Trabajo con una jerarquía de varios catálogos en el Catálogo de datos de AWS Glue con Spark en Amazon EMR

Puede registrar su clúster de Amazon EMR para acceder al Catálogo de datos de AWS Glue, lo que pone a disposición tablas y otros recursos del catálogo para diversos consumidores. AWS El Catálogo de datos de Glue admite una jerarquía de varios catálogos, que unifica los datos de los lagos de datos de Amazon S3. También proporciona una API del metastore de Hive y una API REST de Apache Iceberg de código abierto para acceder a los datos. Estas características están disponibles para Amazon EMR y otros servicios como Amazon Athena y Amazon Redshift.

Cómo se organizan los recursos del catálogo

Cuando crea recursos en el Catálogo de datos de AWS Glue, puede acceder a ellos desde cualquier motor SQL que admita la API REST de Apache Iceberg o el metaalmacén de Hive. AWS Lake Formation administra los permisos.

En el Catálogo de datos de AWS Glue, los datos siguen una jerarquía lógica compuesta por catálogos, bases de datos y tablas:

  • Catálogo: contenedor lógico que contiene objetos de un almacén de datos, como esquemas o tablas.

  • Catálogo para almacenar tablas de Redshift Managed Storage (RMS): cuando administra catálogos para almacenar tablas RMS, puede acceder a esas tablas mediante Iceberg.

  • Base de datos: organiza los objetos de datos de un catálogo, como tablas y vistas.

  • Tablas y vistas: objetos de datos de una base de datos que proporcionan una capa de abstracción con un esquema comprensible. Proporcionan una capa para acceder a datos en distintos formatos y ubicaciones.

Configuración de un catálogo de datos para usarlo con Amazon EMR

Para comenzar, debe configurar el catálogo para que admita las herramientas de Amazon EMR. El Catálogo de datos de AWS Glue ofrece compatibilidad con el metaalmacén de Hive y API compatibles con Iceberg REST.

Configuración de Amazon EMR con un metaalmacén de Hive

Para obtener información sobre cómo configurarlo, consulta Compatibilidad del Catálogo de datos de AWS Glue para trabajos de Spark en la Guía del usuario de AWS Glue. Este tema explica cómo configurar el Catálogo de datos de AWS Glue como metaalmacén de Hive y habilitarlo como punto de conexión. También existe documentación de Amazon EMR que muestra cómo indicar el Catálogo de datos de AWS Glue como metaalmacén de Spark, en Usar el Catálogo de datos de AWS Glue como metaalmacén de Apache Hive para Spark.

Permisos para acceder a los recursos del Catálogo de datos de AWS Glue

En esta sección, se describen los requisitos de políticas de IAM para usar las herramientas de Amazon EMR con datos del catálogo. Después de registrar su clúster con el Catálogo de datos de AWS Glue, necesita los siguientes permisos para detectar la creación y los cambios en los recursos creados posteriormente:

  • glue:GetCatalog

  • glue:GetCatalogs

  • sts:AssumeRole

  • sts:TagSession

  • sts:SetContext

  • sts:SetSourceIdentity

En la mayoría de los casos, recomendamos crear un rol de IAM y asignarle los permisos necesarios.

Además, para consultar datos del catálogo, usted debe establecer permisos para el catálogo mediante AWS Lake Formation. Para más información sobre cómo establecer permisos en catálogos de datos mediante AWS Lake Formation, consulte Granting and revoking permissions on Data Catalog resources.

Una vez que configure su clúster y defina los permisos sobre los objetos del catálogo, puede enviar trabajos para consultar y procesar datos.

Configurar de Spark para acceder a una jerarquía de varios catálogos en el Catálogo de datos de AWS Glue

Con la versión 7.5 de Amazon EMR, usted puede configurar Spark para usar la jerarquía de múltiples catálogos de AWS Glue. Una jerarquía de múltiples catálogos permite:

  • Integrar datos RMS —como tablas, vistas y vistas materializadas— desde sus almacenes de datos de Amazon Redshift hacia el Catálogo de datos de AWS Glue. Puede consultar estos objetos desde EMR on EC2 y EMR sin servidor.

  • Crear catálogos RMS y catálogos en el Catálogo de datos de AWS Glue y almacenar datos en RMS mediante ZeroETL; luego, consultarlos con motores compatibles con Iceberg.

  • Crear tablas administradas de Iceberg en el Catálogo de datos de AWS Glue, con administración completa del almacenamiento, incluida compactación, instantáneas y retención.

Conexión con varios catálogos al iniciar una sesión de Spark

En los siguientes ejemplos, se muestra cómo usar el shell interactivo de Spark, el envío de trabajos con Spark o los cuadernos de Amazon EMR para trabajar con la jerarquía de varios catálogos del Catálogo de datos de AWS Glue.

spark-shell
  1. Conéctese al nodo principal utilizando SSH. Para obtener más información, consulte Conexión al nodo maestro mediante SSH en la Guía de administración de Amazon EMR.

  2. Introduzca el siguiente comando para iniciar el shell de Spark. Para usar el intérprete de comandos de PySpark, sustituya spark-shell por pyspark.

    spark-shell \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket/prefix/ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.catalog.my_catalog.glue.id=Glue RMS catalog ID \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark-submit
  1. Conéctese al nodo principal utilizando SSH. Para obtener más información, consulte Conexión al nodo maestro mediante SSH en la Guía de administración de Amazon EMR.

  2. Ingrese el siguiente comando para iniciar la sesión de Spark para Spark.

    spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.catalog.my_catalog.glue.id=Glue RMS catalog ID \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
EMR Studio notebooks

Para iniciar una sesión de Spark con los Cuadernos de Amazon EMR, configure su sesión de Spark con el comando mágico %%configure de su cuaderno de Amazon EMR, como en el siguiente ejemplo. Para obtener más información, consulte Usar la magia de Cuadernos de Amazon EMR en la Guía de administración de Amazon EMR.

%%configure -f{ "conf":{ "spark.sql.catalog.my_catalog":"org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.my_catalog.type":"glue", "spark.sql.catalog.my_catalog.glue.id":"Glue RMS catalog ID", "spark.sql.catalog.my_catalog.warehouse":"s3://amzn-s3-demo-bucket1/prefix/", "spark.sql.defaultCatalog", "my_catalog", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" } }
CLI

Para inicializar una sesión de Spark mediante la CLI, ejecute el siguiente ejemplo. Para obtener más información sobre cómo especificar una clasificación de configuración con la AWS CLI y la API de Amazon EMR, consulte Configurar aplicaciones.

[ { "Classification": "spark-defaults", "Properties": { "spark.sql.catalog.my_catalog":"org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.my_catalog.type":"glue", "spark.sql.catalog.my_catalog.glue.id":"Glue RMS catalog ID", "spark.sql.catalog.my_catalog.warehouse":"s3://amzn-s3-demo-bucket1/prefix/", "spark.sql.defaultCatalog", "my_catalog", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" } } ]

Inicializar una sesión de Spark para Redshift Managed Storage con el Catálogo de datos de AWS Glue

El siguiente ejemplo inicia una sesión de Spark con el Catálogo de datos de AWS Glue.

spark-sql \ --conf spark.sql.catalog.rms=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.rms.type=glue \ --conf spark.sql.catalog.rms.glue.id=Glue RMS catalog ID \ --conf spark.sql.defaultCatalog=rms --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

El siguiente ejemplo inicia una sesión de Spark mediante la API REST de Iceberg y Redshift Managed Storage con el Catálogo de datos de AWS Glue.

spark-sql \ --conf spark.sql.catalog.rms=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.rms.type=rest \ --conf spark.sql.catalog.rms.warehouse=glue RMS catalog ID \ --conf spark.sql.catalog.rms.uri=Glue endpoint URI/iceberg \ --conf spark.sql.catalog.rms.rest.sigv4-enabled=true \ --conf spark.sql.catalog.rms.rest.signing-name=glue \ --conf spark.sql.defaultCatalog=rms \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Para más información sobre cómo usar una jerarquía de varios catálogos de AWS Glue con Spark Iceberg, consulte Use an Iceberg cluster with Spark.

Consideraciones y limitaciones para una configuración con varios catálogos

  • Una jerarquía de varios catálogos no admite el metaalmacén de Apache Hive.

  • Una jerarquía de varios catálogos con Apache Iceberg no permite recurrir al metaalmacén de Apache Hive cuando se usa SparkSessionCatalog.

  • Los clústeres de EMR en EC2 con rol de tiempo de ejecución no admiten jerarquías de varios catálogos.

  • Los clústeres de EMR en EC2 habilitados con AWS Lake Formation no admiten jerarquías de varios catálogos.