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.
-
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=trueyspark.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:
Reemplace los marcadores de posición:
S3_DATA_LOCATION: la ruta de su bucket de S3REGION: 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 configurarspark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueen Spark.Cree una carpeta S3 en la ubicación de la tabla
s3://path/to/table/table_namemediante 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.HoodieCredentialedHadoopStorageEl 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:
| 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 |