使用Amazon S3中的數據

Databricks為連接AWS S3維護優化的驅動程序。Amazon S3是用於存儲大量非結構化對象數據(如文本或二進製數據)的服務。

本文解釋了如何訪問AWS S3桶。

重要的

  • S3A文件係統默認啟用緩存,並在' filessystem .close() '上釋放資源。為了避免其他線程錯誤地使用對緩存文件係統的引用,不要顯式使用` filessystem .close()。

  • S3A文件係統在關閉輸出流時不刪除目錄標記。基於Hadoop版本的遺留應用程序不包括hadoop - 13230即使裏麵有文件,也會被誤解為空目錄。

請注意

如果您正在查找關於使用掛載的S3數據的信息,請參見通過Databricks掛載雲對象存儲

使用Unity Catalog外部位置訪問S3桶

Unity Catalog管理訪問S3桶中的數據使用外部位置.管理員主要使用外部位置來配置Unity Catalog外部表,但也可以將訪問權限委托給使用可用特權的用戶或組(文件文件,創建表格).

使用完全限定的S3 URI訪問Unity Catalog保護的數據。因為權限是由Unity Catalog管理的,你不需要通過任何額外的選項或配置進行身份驗證。

警告

當訪問由外部位置管理的數據時,Unity Catalog忽略Spark配置設置。

閱讀的例子:

dbutilsfsls“s3: / /桶/外部位置的路徑/ /數據”火花格式“鋪”負載“s3: / /桶/外部位置的路徑/ /數據”火花sql"SELECT * FROM parquet. ' s3://my-bucket/external-location/path/to/data ' "

寫作的例子:

dbutilsfsmv“s3: / /桶/外部位置的路徑/ /數據”“s3: / /桶/外部位置的路徑/ /新位置”df格式“鋪”保存“s3: / /桶/外部位置的路徑/ /新位置”

創建外部表的例子:

df選項“路徑”“s3: / /桶/外部位置的路徑/ /表”saveAsTable“my_table”火花sql"""創建表my_table位置“s3: / /桶/外部位置的路徑/ /表”(SELECT *從parquet. s3: / /桶/外部位置的/道路/ /數據”)"""

使用實例配置文件訪問S3桶

您可以在Databricks中將IAM角色加載為實例配置文件,並將實例配置文件附加到集群中,以控製對S3的數據訪問。Databricks建議在您的環境或工作負載中無法使用Unity Catalog時使用實例概要文件。看到使用實例配置文件安全訪問S3桶

使用uri和AWS鍵訪問S3桶

該方法允許Spark worker直接使用AWS密鑰訪問S3 bucket中的對象。它使用磚秘密用來儲存鑰匙。

access_keydbutils秘密得到範圍“aws”關鍵“aws-access-key”secret_keydbutils秘密得到範圍“aws”關鍵“aws-secret-key”sc_jschadoopConfiguration()“fs.s3a.access.key”access_keysc_jschadoopConfiguration()“fs.s3a.secret.key”secret_key如果您使用Auto Loader文件通知模式加載文件,請提供AWS區域ID。aws_region“aws-region-id”sc_jschadoopConfiguration()“fs.s3a.endpoint”“s3。”+aws_region+“.amazonaws.com”myRDDsc文本文件“s3a: / /% s/…………”aws_bucket_namemyRDD()

配置KMS加密s3a: / /路徑

步驟1:配置實例概要文件

在Databricks中創建一個實例配置文件

步驟2:為配置中提供的KMS密鑰添加實例概要文件作為密鑰用戶

  1. 在AWS中,轉到KMS服務。

  2. 單擊要添加權限的鍵。

  3. 在“關鍵用戶”區域,單擊添加

  4. 選中IAM角色旁邊的複選框。

  5. 點擊添加

步驟3:設置加密屬性

中設置全局KMS加密屬性火花配置設置或使用init腳本.配置spark.hadoop.fs.s3a.server-side-encryption.key密鑰與您自己的密鑰ARN。

火花配置

spark.hadoop.fs.s3a.server-side-encryption.keyarn:aws:kms:::key/spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS

您還可以配置一桶公裏加密

Init腳本

通過在筆記本單元中運行以下代碼來創建初始化腳本,配置全局加密設置set-kms.sh而且配置一個集群運行腳本。

dbutilsfs“磚/腳本/ set-kms.sh”"""# !/bin/bash貓> /磚/司機/ conf / aes-encrypt-custom-spark-conf.conf < <生物(司機){“spark.hadoop.fs.s3a.server-side-encryption。關鍵" = "arn:aws:kms:::key/"“spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS“=終點"""真正的

驗證加密工作後,在所有集群上使用全球init腳本

配置

Databricks Runtime 7.3 LTS及以上版本支持配置S3A文件係統開源Hadoop選項.可以配置全局屬性和每個桶的屬性。

全局配置

#全局S3配置spark.hadoop.fs.s3a.aws.credentials。供應商< aws-credentials-provider-class >spark.hadoop.fs.s3a。端點< aws-endpoint >spark.hadoop.fs.s3a。server-side-encryption-algorithm SSE-KMS

一桶配置

您可以使用語法配置每個桶的屬性spark.hadoop.fs.s3a.bucket。< bucket名> . <配置鍵>.這允許您使用不同的憑據、端點等來設置桶。

例如,除了全局S3設置,你可以使用以下鍵單獨配置每個桶:

#為特定桶設置認證和端點spark.hadoop.fs.s3a.bucket。< bucket名> .aws.credentials。供應商< aws-credentials-provider-class >spark.hadoop.fs.s3a.bucket。< bucket名>。端點< aws-endpoint >#為特定桶配置不同的KMS加密密鑰spark.hadoop.fs.s3a.bucket。< bucket名> .server-side-encryption。關鍵< aws-kms-encryption-key >

Access Requester支付桶

以便訪問請求者支付將以下行添加到集群的bucket中火花配置

spark.hadoop.fs.s3a.requester-pays。使真正的

請注意

Databricks不支持Delta Lake寫請求支付桶。