Uso de Lake Formation con los grupos de trabajo de Athena Spark
Con la versión de lanzamiento de Apache Spark 3.5, puede aprovechar AWS Lake Formation con AWS Glue Data Catalog, donde el rol de ejecución de la sesión tiene permisos de tabla completos. Esta capacidad le permite leer y escribir en tablas protegidas por Lake Formation desde sus sesiones interactivas de Athena Spark. Consulte las siguientes secciones para obtener más información sobre Lake Formation y cómo usarlo con Athena Spark.
Paso 1: habilitación del acceso completo a las tablas en Lake Formation
Para utilizar el modo de acceso completo a la tabla (FTA), debe permitir que Athena Spark acceda 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 .
Paso 1.1: registro de las ubicaciones de los datos en Lake Formation mediante el rol definido por el usuario
Debe utilizar un rol definido por el usuario para registrar las ubicaciones de los datos en AWS Lake Formation. Consulte Requisitos de los roles utilizados para registrar ubicaciones para obtener más información.
Paso 2: configuración de los permisos de IAM para el rol de ejecución de la sesión
Para acceder a los datos subyacentes, ya sea para lectura o escritura, además de los permisos de Lake Formation, el rol de ejecución 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
SELECTde Lake Formation. -
Los trabajos de Spark que escriben o eliminan datos en S3 requieren el permiso
ALL (SUPER)de Lake Formation. -
Los trabajos de Spark que interactúan con AWS Glue Data Catalog requieren los permisos
DESCRIBE,ALTERyDROP, según corresponda.
Paso 3: inicialización de una sesión de Spark para el acceso completo a la tabla mediante Lake Formation
Requisitos previos
AWS Glue Data Catalog se debe configurar como un metaalmacén para acceder a las tablas de Lake Formation.
Para configurar AWS Glue Catalog como metaalmacén, establezca la siguiente configuración:
{ "spark.hadoop.glue.catalogid": "ACCOUNT_ID", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.hadoop.hive.metastore.glue.catalogid": "ACCOUNT_ID", "spark.sql.catalogImplementation": "hive" }
Para acceder a tablas registradas en AWS Lake Formation, es necesario establecer las siguientes configuraciones durante la inicialización de Spark, con el fin de configurar Spark para que utilice credenciales de AWS Lake Formation.
Hive
{ "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" }
Apache Iceberg
{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "s3://your-bucket/warehouse/", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true" }
Tablas de Amazon S3
{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.{catalogName}": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.{catalogName}.warehouse": "arn:aws:s3tables:{region}:{accountId}:bucket/{bucketName}", "spark.sql.catalog.{catalogName}.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.{catalogName}.glue.id": "{accountId}:s3tablescatalog/{bucketName}", "spark.sql.catalog.{catalogName}.glue.lakeformation-enabled": "true", "spark.sql.catalog.{catalogName}.client.region": "REGION", "spark.sql.catalog.{catalogName}.glue.account-id": "ACCOUNT_ID" }
Delta Lake
{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog", "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" }
Condiciones y limitaciones
-
El acceso completo a tablas es compatible con tablas de Hive, Iceberg, Tablas de Amazon S3 y Delta. Las tablas de Hudi son compatibles con el acceso completo a las tablas.
-
Para añadir nuevos catálogos a una sesión activa, utilice
spark.conf.setcon nuevas configuraciones de catálogo. -
Las configuraciones del catálogo son inmutables. Si desea actualizar la configuración de un catálogo, cree un nuevo catálogo mediante
spark.conf.set. -
Añada solo los catálogos que necesite a la sesión de Spark.
-
Para cambiar el catálogo predeterminado:
spark.catalog.setCurrentCatalog("s3tablesbucket") -
Si tiene caracteres especiales en el nombre de su catálogo, como
-, úselos con el carácter de escape en la consulta de la siguiente manera:SELECT sales_amount as nums FROM `my-s3-tables-bucket`.`s3namespace`.`daily_sales` LIMIT 100