Acceso completo a la tabla de Lake Formation para Amazon EMR en EC2 - Amazon EMR

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.

Acceso completo a la tabla de Lake Formation para Amazon EMR en EC2

Con las versiones 7.8.0 y posteriores de Amazon EMR, puede aprovechar AWS Lake Formation con Glue Data Catalog, donde el rol de ejecución de tareas tiene permisos de tabla completos sin las limitaciones de un control de acceso detallado. Esta capacidad le permite leer y escribir en tablas protegidas por Lake Formation desde sus trabajos por lotes e interactivos de Amazon EMR en EC2 Spark. Consulte las siguientes secciones para obtener más información sobre Lake Formation y cómo usarla con Amazon EMR activado. EC2

Uso de Lake Formation con acceso completo a las tablas

Puedes acceder a las tablas del catálogo de Glue Data protegidas por AWS Lake Formation desde Amazon EMR en trabajos de EC2 Spark o en sesiones interactivas en las que el rol de tiempo de ejecución del trabajo tiene acceso completo a las tablas. No es necesario activar AWS Lake Formation en Amazon EMR en EC2 la aplicación. Cuando un trabajo de Spark está configurado para el acceso total a la tabla (FTA), las credenciales de AWS Lake Formation se utilizan para los datos de read/write S3 de las tablas registradas de AWS Lake Formation, mientras que las credenciales del rol de tiempo de ejecución del trabajo se utilizan para read/write las tablas no registradas en AWS Lake Formation.

importante

No habilite AWS Lake Formation para un control de acceso detallado. Un trabajo no puede utilizar simultáneamente el acceso completo a las tablas (FTA) y el control de acceso detallado (FGAC) en el mismo clúster o la misma aplicación de EMR.

Paso 1: habilitación del acceso completo a las tablas en Lake Formation

Para utilizar el modo Full Table Access (FTA), debe permitir que los motores de consulta de terceros accedan a los datos sin la validación de etiquetas de sesión de IAM en AWS Lake Formation. Para habilitarlo, siga los pasos descritos en Integración de aplicaciones para acceso completo a la tabla .

nota

Cuando se accede a tablas entre cuentas, se debe habilitar el acceso completo a las tablas tanto en las cuentas de productores como en las de consumidores. Del mismo modo, cuando se accede a las tablas entre regiones, esta configuración debe estar habilitada tanto en las regiones de productores como en las de consumidores.

Paso 2: configuración de los permisos de IAM para el rol en tiempo de ejecución del trabajo

Para acceder a los datos subyacentes, ya sea para lectura o escritura, además de los permisos de Lake Formation, el rol de tiempo de ejecución del trabajo necesita el permiso de IAM lakeformation:GetDataAccess. Con este permiso, Lake Formation concede la solicitud de credenciales temporales para acceder a los datos.

El siguiente es un ejemplo de política sobre cómo proporcionar permisos de IAM para acceder a un script en Amazon S3, cargar registros en S3, permisos de la API de AWS Glue y permiso para acceder a Lake Formation.

Paso 2.1: configuración de los permisos de Lake Formation

  • Los trabajos de Spark que leen datos desde S3 requieren el permiso SELECCIONAR de Lake Formation.

  • Los trabajos de Spark write/delete cuyos datos en S3 requieren el permiso de Lake Formation ALL (SUPER).

  • Los trabajos de Spark que interactúan con el Catálogo de datos de Glue requieren los permisos DESCRIBIR, MODIFICAR o DESCARTAR, según corresponda.

Para obtener más información, consulte Granting permissions on Data Catalog resources.

Paso 3: inicialización de una sesión de Spark para el acceso completo a la tabla mediante Lake Formation

Requisitos previos

AWS El catálogo de datos de Glue debe configurarse como un metaalmacén para acceder a las tablas de Lake Formation.

Para configurar el catálogo de Glue como repositorio de metadatos, establezca la siguiente configuración:

--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory

Para obtener más información sobre cómo habilitar el catálogo de datos para Amazon EMR en EC2, consulte Configuración de Metastore para Amazon EMR en. EC2

Para acceder a las tablas registradas en AWS Lake Formation, se deben establecer las siguientes configuraciones durante la inicialización de Spark para configurar Spark para que use las credenciales de AWS Lake Formation.

Hive
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Iceberg
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=S3_DATA_LOCATION --conf spark.sql.catalog.spark_catalog.client.region=REGION --conf spark.sql.catalog.spark_catalog.type=glue --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.lakeformation-enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Delta Lake
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Hudi
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true --conf spark.jars=/usr/lib/hudi/hudi-spark-bundle.jar --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.serializer=org.apache.spark.serializer.KryoSerializer
  • spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Configure el sistema de archivos EMR (EMRFS) o el EMR S3A para usar las credenciales S3 de Lake Formation para las tablas registradas de AWS Lake Formation. Si la tabla no está registrada, utilice las credenciales del rol en tiempo de ejecución del trabajo.

  • spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true y spark.hadoop.fs.s3.folderObject.autoAction.disabled=true: configure EMRFS para que utilice el encabezado de tipo de contenido application/x-directory en lugar del sufijo $folder$ al crear carpetas en S3. Esto es necesario para leer las tablas de Lake Formation, ya que las credenciales de Lake Formation no permiten leer carpetas de tablas que utilicen el sufijo $folder$.

  • spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: configure Spark para omitir la validación de que la ubicación de la tabla esté vacía antes de crearla. Esto es necesario para las tablas registradas en Lake Formation, ya que las credenciales de Lake Formation necesarias para verificar que la ubicación esté vacía solo se encuentran disponibles después de crear la tabla de Catálogo de datos de Glue. Sin esta configuración, las credenciales del rol en tiempo de ejecución del trabajo validarán si la ubicación de la tabla está vacía.

  • spark.sql.catalog.createDirectoryAfterTable.enabled=true: configure Spark para crear la carpeta en Amazon S3 después de crear la tabla en el repositorio de metadatos de Hive. Esto es necesario para tablas registradas en Lake Formation, ya que las credenciales de Lake Formation necesarias para crear la carpeta en S3 solo se encuentran disponibles después de crear la tabla de Catálogo de datos de Glue.

  • spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configure Spark para descartar la carpeta en S3 antes de eliminar la tabla del repositorio de metadatos de Hive. Esto es necesario para las tablas registradas en Lake Formation, ya que las credenciales de Lake Formation para descartar la carpeta de S3 no están disponibles después de eliminar la tabla del Catálogo de datos de Glue.

  • spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: Configure el catálogo de Iceberg para usar las credenciales S3 de AWS Lake Formation para las tablas registradas de Lake Formation. Si la tabla no está registrada, utilice las credenciales predeterminadas del entorno.

Configure el modo de acceso completo a las tablas en SageMaker Unified Studio

Para acceder a las tablas registradas de Lake Formation desde las sesiones interactivas de Spark en JupyterLab cuadernos, usa el modo de permiso de compatibilidad. Use el comando mágico %%configure para configurar Spark. Elija la configuración según el tipo de tabla:

For Hive tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true } }
For Iceberg tables
%%configure -f { "conf": { "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "S3_DATA_LOCATION", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.type": "glue", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true", } }
For Delta Lake tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true } }
For Hudi tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true, "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.serializer": "org.apache.spark.serializer.KryoSerializer" } }

Reemplace los marcadores de posición:

  • S3_DATA_LOCATION: la ruta de su bucket de S3

  • REGION: AWS región (por ejemplo, us-east-1)

  • ACCOUNT_ID: El ID de tu cuenta AWS

nota

Debe establecer estas configuraciones antes de ejecutar cualquier operación de Spark en el bloc de notas.

Operaciones admitidas

Estas operaciones utilizarán las credenciales de AWS Lake Formation para acceder a los datos de la tabla.

  • CREATE TABLE

  • ALTER TABLE

  • INSERT INTO

  • INSERT OVERWRITE

  • UPDATE

  • MERGE INTO

  • DELETE FROM

  • ANALIZAR TABLA

  • REPARAR TABLA

  • DROP TABLE

  • Consultas de orígenes de datos de Spark

  • Escrituras de orígenes de datos de Spark

nota

Las operaciones no mencionadas anteriormente aún usan permisos de IAM para acceder a los datos de las tablas.

Consideraciones

  • Si una tabla de Hive se crea mediante un trabajo que no tiene habilitado el acceso completo a la tabla y no se insertan registros, las lecturas o escrituras posteriores desde un trabajo con acceso completo a la tabla fallarán. Esto se debe a que, cuando no tiene habilitado el acceso completo a la tabla, EMR Spark agrega el sufijo $folder$ al nombre de la carpeta de la tabla. Para resolver esto, puede optar por una de las siguientes acciones:

    • Insertar al menos una fila en la tabla desde un trabajo que no tenga FTA habilitado.

    • Configure el trabajo que no tiene FTA habilitado para evitar el uso del sufijo $folder$ en el nombre de la carpeta en S3. Esto se logra al configurar spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true en Spark.

    • Cree una carpeta S3 en la ubicación de la tabla s3://path/to/table/table_name mediante la consola AWS S3 o la CLI de AWS S3.

  • El acceso completo a las tablas es compatible con el sistema de archivos EMR (EMRFS) a partir de la versión 7.8.0 de Amazon EMR y con el sistema de archivos S3A a partir de la versión 7.10.0 de Amazon EMR.

  • Las tablas Hive, Iceberg, Delta y Hudi admiten el acceso completo a la tabla.

  • Consideraciones sobre Hudi FTA Write Support:

    • Las escrituras Hudi FTA deben usarse para la venta de credenciales HoodieCredentialedHadoopStorage durante la ejecución del trabajo. Establezca la siguiente configuración al ejecutar los trabajos de Hudi: hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorage

    • El soporte de escritura Full Table Access (FTA) para Hudi está disponible a partir de la versión 7.12 de Amazon EMR.

    • Actualmente, la compatibilidad con la escritura Hudi FTA solo funciona con las configuraciones de Hudi predeterminadas. Los ajustes de Hudi personalizados o no predeterminados podrían no ser totalmente compatibles y podrían causar un comportamiento inesperado.

    • En este momento, no se admite la agrupación en clústeres para tablas Hudi Merge-On-Read (MOR) en el modo de escritura FTA.

  • Los trabajos que hagan referencia a tablas con reglas de control de acceso detallado (FGAC) de Lake Formation o con vistas del Catálogo de datos de Glue generarán errores. Para consultar una tabla con reglas de FGAC o una vista del Catálogo de datos de Glue, debe usar el modo FGAC. Puede activar el modo FGAC siguiendo los pasos que se describen en la AWS documentación: Uso de Amazon EMR con AWS Lake EC2 Formation para un control de acceso detallado.

  • El acceso completo a tablas no ofrece compatibilidad con Spark Streaming.

  • Al DataFrame escribir Spark en una tabla de Lake Formation, solo se admite el modo APPEND para las tablas Hive e Iceberg: df.write.mode("append").saveAsTable(table_name)

  • La creación de tablas externas requiere permisos de IAM.

  • Como Lake Formation almacena temporalmente en caché las credenciales de un trabajo de Spark, es posible que los trabajos por lotes o las sesiones interactivas de Spark que se estén ejecutando no reflejen los cambios de permisos.

  • Debe utilizar un rol definido por el usuario, no uno vinculado a un servicio: Requisitos de Lake Formation en relación con los roles.

Hudi FTA Write Support: operaciones compatibles

La siguiente tabla muestra las operaciones de escritura compatibles con las tablas Hudi Copy-On-Write (COW) y Merge-On-Read (MOR) en el modo de acceso completo a la tabla:

Operaciones de escritura compatibles con Hudi FTA
Tipo de tabla Operación Comando de escritura SQL Status
VACA INSERT INSERT INTO TABLE compatible
VACA INSERT INSERTAR EN LA TABLA: PARTICIÓN (estática, dinámica) compatible
VACA INSERT INSERT OVERWRITE compatible
VACA INSERT INSERTAR SOBRESCRITURA: PARTICIÓN (estática, dinámica) compatible
UPDATE UPDATE UPDATE TABLE compatible
VACA UPDATE TABLA DE ACTUALIZACIÓN: cambiar partición No es compatible
DELETE DELETE DELETE FROM TABLE compatible
ALTER ALTER MODIFICAR TABLA: CAMBIAR EL NOMBRE A No es compatible
VACA ALTER ALTERAR UNA TABLA: ESTABLECER LAS PROPIEDADES DE LA TABLA compatible
VACA ALTER ALTER TABLE - DESCONFIGURAR TBLPROPERTIES compatible
VACA ALTER ALTERAR TABLA - ALTERAR COLUMNA compatible
VACA ALTER MODIFICAR TABLA: AGREGAR COLUMNAS compatible
VACA ALTER ALTERAR TABLA: AGREGAR PARTICIÓN compatible
VACA ALTER ALTERAR TABLA - ELIMINAR PARTICIÓN compatible
VACA ALTER ALTERAR TABLA: RECUPERAR PARTICIONES compatible
VACA ALTER REPARAR PARTICIONES DE SINCRONIZACIÓN DE TABLAS compatible
DROP DROP DROP TABLE compatible
VACA DROP TABLA DESPLEGABLE - PURGAR compatible
CREATE CREATE CREAR TABLA: gestionado compatible
VACA CREATE CREAR TABLA: PARTICIONAR POR compatible
VACA CREATE CREAR TABLA SI NO EXISTE compatible
VACA CREATE CREATE TABLE LIKE compatible
VACA CREATE CREATE TABLE AS SELECT compatible
CREATE CREATE CREAR TABLA CON UBICACIÓN - Tabla externa No es compatible
MARCO DE DATOS (INSERTAR) MARCO DE DATOS (INSERTAR) saveAsTable.Sobrescribir compatible
VACA MARCO DE DATOS (INSERTAR) saveAsTable.Anexar No es compatible
VACA MARCO DE DATOS (INSERTAR) saveAsTable.Ignorar compatible
VACA MARCO DE DATOS (INSERTAR) saveAsTable.ErrorIfExists compatible
VACA MARCO DE DATOS (INSERTAR) saveAsTable - Tabla externa (ruta) No es compatible
VACA MARCO DE DATOS (INSERTAR) guardar (ruta) - DF v1 No es compatible
MÁS INSERT INSERT INTO TABLE compatible
MÁS INSERT INSERTAR EN LA TABLA: PARTICIÓN (estática, dinámica) compatible
MÁS INSERT INSERT OVERWRITE compatible
MÁS INSERT INSERTAR SOBRESCRITURA: PARTICIÓN (estática, dinámica) compatible
UPDATE UPDATE UPDATE TABLE compatible
MÁS UPDATE TABLA DE ACTUALIZACIÓN: cambiar partición No es compatible
DELETE DELETE DELETE FROM TABLE compatible
ALTER ALTER MODIFICAR TABLA: CAMBIAR EL NOMBRE A No es compatible
MÁS ALTER MODIFICAR UNA TABLA: ESTABLECER LAS PROPIEDADES DE LA TABLA compatible
MÁS ALTER MODIFICAR TABLA - DESCONFIGURAR TBLPROPERTIES compatible
MÁS ALTER ALTERAR TABLA - ALTERAR COLUMNA compatible
MÁS ALTER MODIFICAR TABLA: AGREGAR COLUMNAS compatible
MÁS ALTER ALTERAR TABLA: AGREGAR PARTICIÓN compatible
MÁS ALTER ALTERAR UNA TABLA: ELIMINAR UNA PARTICIÓN compatible
MÁS ALTER ALTERAR UNA TABLA: RECUPERAR PARTICIONES compatible
MÁS ALTER REPARAR PARTICIONES DE SINCRONIZACIÓN DE TABLAS compatible
DROP DROP DROP TABLE compatible
MÁS DROP TABLA DESPLEGABLE - PURGAR compatible
CREATE CREATE CREAR TABLA: gestionado compatible
MÁS CREATE CREAR TABLA: PARTICIONAR POR compatible
MÁS CREATE CREAR TABLA SI NO EXISTE compatible
MÁS CREATE CREATE TABLE LIKE compatible
MÁS CREATE CREATE TABLE AS SELECT compatible
CREATE CREATE CREAR TABLA con UBICACIÓN - Tabla externa No es compatible
MARCO DE DATOS (MODIFICADO) MARCO DE DATOS (ALTERADO) saveAsTable.Sobrescribir compatible
MÁS MARCO DE DATOS (ALTERADO) saveAsTable.Anexar No es compatible
MÁS MARCO DE DATOS (ALTERADO) saveAsTable.Ignorar compatible
MÁS MARCO DE DATOS (ALTERADO) saveAsTable.ErrorIfExists compatible
MÁS MARCO DE DATOS (ALTERADO) saveAsTable - Tabla externa (ruta) No es compatible
• MÁS MARCO DE DATOS (ALTERADO) guardar (ruta) - DF v1 No es compatible
MARCO DE DATOS (ELIMINAR) MARCO DE DATOS (ELIMINAR) saveAsTable.Anexar No es compatible
MÁS MARCO DE DATOS (ELIMINAR) saveAsTable - Tabla externa (ruta) No es compatible
• MÁS MARCO DE DATOS (ELIMINAR) guardar (ruta) - DF v1 No es compatible
MARCO DE DATOS (BULK_INSERT) MARCO DE DATOS (BULK_INSERT) saveAsTable.Sobrescribir compatible
MÁS MARCO DE DATOS (BULK_INSERT) saveAsTable.Anexar No es compatible
MÁS MARCO DE DATOS (BULK_INSERT) saveAsTable.Ignorar compatible
MÁS MARCO DE DATOS (BULK_INSERT) saveAsTable.ErrorIfExists compatible
MÁS MARCO DE DATOS (BULK_INSERT) saveAsTable - Tabla externa (ruta) No es compatible
• MÁS MARCO DE DATOS (BULK_INSERT) guardar (ruta) - DF v1 No es compatible