在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: / /桶/外部位置的路徑/ /表”As (select *)從parquet. s3: / /桶/外部位置的/道路/ /數據”)”“”

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

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

使用uri和AWS密鑰訪問S3桶

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

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如果您使用自動加載器文件通知模式來加載文件,請提供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:配置實例配置文件

在“數據庫”中創建實例配置文件

步驟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

您還可以配置每桶KMS加密

Init腳本

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

dbutilsfs“磚/腳本/ set-kms.sh””“”# !/bin/bashcat >/databricks/driver/conf/aes-encrypt-custom-spark-conf.conf </databricks/driver/conf/aes-encrypt-custom-spark-conf.conf(司機){“spark.hadoop.fs.s3a.server-side-encryption。關鍵" = "arn:aws:kms:::key/"“spark.hadoop.fs.s3a。服務器端加密算法" = "SSE-KMS"終點”“”真正的

驗證加密是否有效後,請在所有集群上使用全局初始化腳本

配置

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設置外,您還可以使用以下鍵單獨配置每個bucket:

#為特定桶設置認證和端點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 >

訪問請求者支付桶

啟用訪問請求者支付桶,將下麵的行添加到集群的桶中火花配置

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

請注意

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