在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: / /桶/外部位置的路徑/ /表”As (select *)從parquet. s3: / /桶/外部位置的/道路/ /數據”)”“”)
使用實例配置文件訪問S3桶
您可以在Databricks中將IAM角色加載為實例配置文件,並將實例配置文件附加到集群以控製對S3的數據訪問。Databricks建議當Unity Catalog對您的環境或工作負載不可用時使用實例配置文件。看到使用實例概要保護對S3桶的訪問.
使用uri和AWS密鑰訪問S3桶
該方法允許Spark worker使用AWS密鑰直接訪問S3桶中的對象。它使用Databricks秘密用來存儲密鑰。
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)如果您使用自動加載器文件通知模式來加載文件,請提供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:配置實例配置文件
在“數據庫”中創建實例配置文件.
步驟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
而且配置集群運行腳本。
dbutils.fs.把(“磚/腳本/ 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 >