使用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配置設置。
閱讀的例子:
dbutils.fs.ls(“s3: / /桶/外部位置的路徑/ /數據”)火花.讀.格式(“鋪”).負載(“s3: / /桶/外部位置的路徑/ /數據”)火花.sql("SELECT * FROM parquet. ' s3://my-bucket/external-location/path/to/data ' ")
寫作的例子:
dbutils.fs.mv(“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_key=dbutils.秘密.得到(範圍=“aws”,關鍵=“aws-access-key”)secret_key=dbutils.秘密.得到(範圍=“aws”,關鍵=“aws-secret-key”)sc._jsc.hadoopConfiguration().集(“fs.s3a.access.key”,access_key)sc._jsc.hadoopConfiguration().集(“fs.s3a.secret.key”,secret_key)如果您使用Auto Loader文件通知模式加載文件,請提供AWS區域ID。aws_region=“aws-region-id”sc._jsc.hadoopConfiguration().集(“fs.s3a.endpoint”,“s3。”+aws_region+“.amazonaws.com”)myRDD=sc.文本文件(“s3a: / /% s/…………”%aws_bucket_name)myRDD.數()
配置KMS加密s3a: / /
路徑
步驟1:配置實例概要文件
在Databricks中創建一個實例配置文件.
步驟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
而且配置一個集群運行腳本。
dbutils.fs.把(“磚/腳本/ 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 >