共用方式為


連線至 Amazon S3

本文說明如何從 Azure Databricks 連線到 AWS S3。

使用 URI 和 AWS 金鑰存取 S3 貯體

您可以設定 Spark 屬性來設定 AWS 金鑰以存取 S3。

Databricks 建議使用秘密範圍來儲存所有認證。 您可以授與工作區存取權中的使用者、服務主體和群組,以讀取秘密範圍。 這可保護 AWS 金鑰,同時允許使用者存取 S3。 若要建立秘密範圍,請參閱 管理秘密範圍

認證的範圍可以設定為叢集或筆記本。 同時使用叢集訪問控制和筆記本訪問控制來保護對 S3 的存取。 請參閱計算權限使用 Databricks 筆記本的共同作業

若要設定 Spark 屬性,請使用叢集 Spark 組態中的下列代碼段,將儲存在秘密範圍中的 AWS 金鑰設定為環境變數

AWS_SECRET_ACCESS_KEY={{secrets/scope/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/scope/aws_access_key_id}}

接著,您可以使用下列命令從 S3 讀取:

aws_bucket_name = "my-s3-bucket"

df = spark.read.load(f"s3a://{aws_bucket_name}/flowers/delta/")
display(df)
dbutils.fs.ls(f"s3a://{aws_bucket_name}/")

使用開放原始碼 Hadoop 選項存取 S3

Databricks Runtime 支援使用 開放原始碼 Hadoop 選項設定 S3A 文件系統。 您可以設定全域屬性和每個貯體屬性。

全域組態

# Global S3 configuration
spark.hadoop.fs.s3a.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.endpoint <aws-endpoint>
spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS

每個貯體組態

您可以使用語法 spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>來設定每個貯體屬性。 這可讓您使用不同的認證、端點等等來設定貯體。

例如,除了全域 S3 設定之外,您還可以使用下列索引鍵個別設定每個貯體:

# Set up authentication and endpoint for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.bucket.<bucket-name>.endpoint <aws-endpoint>

# Configure a different KMS encryption key for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.server-side-encryption.key <aws-kms-encryption-key>

從 Azure Databricks 儲存和存取資料的模式已遭淘汰

以下是已被取代的儲存體模式:

重要

  • S3A 檔案系統預設會啟用快取,並釋放 『FileSystem.close()』 上的資源。 若要避免其他線程使用對快取文件系統的參考不正確,請勿明確地使用 'FileSystem.close()。
  • 關閉輸出數據流時,S3A 檔案系統不會移除目錄標記。 以不包含 HADOOP-13230 的Hadoop版本為基礎的舊版應用程式,即使裡面有檔案,仍會將它們誤譯為空目錄。