本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 Athena Spark 工作群組使用 Lake Formation
使用發行版本 Apache Spark 3.5 版,您可以使用 AWS Lake Formation AWS Glue Data Catalog,其中工作階段執行角色具有完整的資料表許可。此功能可讓您從 Athena Spark 互動式工作階段讀取和寫入受 Lake Formation 保護的資料表。請參閱下列各節,進一步了解 Lake Formation 以及如何搭配 Athena Spark 使用。
步驟 1:在 Lake Formation 中啟用完整資料表存取
若要使用完整資料表存取 (FTA) 模式,您必須允許 Athena Spark 在沒有 IAM 工作階段標籤驗證的情況下存取資料 AWS Lake Formation。若要啟用,請遵循整合應用程式進行完整資料表存取中的步驟。
步驟 1.1:使用使用者定義的角色在 Lake Formation 中註冊資料位置
您必須使用使用者定義的角色來註冊其中的資料位置 AWS Lake Formation。如需詳細資訊,請參閱用於註冊位置的角色需求。
步驟 2:設定工作階段執行角色的 IAM 許可
對於基礎資料的讀取或寫入存取權,除了 Lake Formation 許可之外,執行角色還需要 lakeformation:GetDataAccess IAM 許可。有了此許可,Lake Formation 就會授與要求存取資料所需的臨時憑證。
以下範例政策說明如何提供 IAM 許可,以存取 Amazon S3 中的指令碼、將日誌上傳至 S3、 AWS Glue API 許可,以及存取 Lake Formation 的許可。
步驟 2.1:設定 Lake Formation 許可
-
從 S3 讀取資料的 Spark 任務需要 Lake Formation
SELECT許可。 -
在 S3 中寫入/刪除資料的 Spark 任務需要 Lake Formation
ALL (SUPER)許可。 -
與 AWS Glue 資料目錄互動的 Spark 任務需要
DESCRIBE、ALTER、DROP許可。
步驟 3:使用 Lake Formation 初始化完整資料表存取的 Spark 工作階段
先決條件
AWS Glue Data Catalog 必須設定為中繼存放區,才能存取 Lake Formation 資料表。
設定下列設定,將 AWS Glue 目錄設定為中繼存放區:
{ "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" }
若要存取向 註冊的資料表 AWS Lake Formation,需要在 Spark 初始化期間設定下列組態,以將 Spark 設定為使用 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" }
Amazon S3 Tables
{ "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" }
考量事項與限制
-
Hive、Iceberg、Amazon S3 資料表和 Delta 資料表支援完整資料表存取。Hudi 資料表不支援完整資料表存取。
-
若要將新目錄新增至作用中工作階段,請使用
spark.conf.set搭配新的目錄組態。 -
目錄組態不可變。如果您想要更新目錄組態,請使用 建立新目錄
spark.conf.set。 -
僅將您需要的目錄新增至 Spark 工作階段。
-
若要變更預設目錄:
spark.catalog.setCurrentCatalog("s3tablesbucket") -
如果您的目錄名稱中有類似 的特殊字元
-,請在查詢中逸出它,例如:SELECT sales_amount as nums FROM `my-s3-tables-bucket`.`s3namespace`.`daily_sales` LIMIT 100