連接到Amazon S3

本文闡述了如何連接到AWS S3磚。

磚建議使用統一的目錄外部地點連接到S3。

連接到S3與統一目錄

外部位置和存儲憑證在S3中允許統一目錄讀取和寫入數據代表的用戶。管理員主要使用外部位置配置統一目錄外部表

存儲憑證是一個統一的目錄S3對象用於身份驗證。這是一個我角色授權讀取或寫入一個S3 bucket的道路。外部的位置是一個對象,結合了雲存儲路徑和存儲憑證。

誰能管理外部位置和存儲憑證?

AWS用戶創建我的角色存儲憑證必須:

  • 是一個AWS帳戶用戶與權限創建或更新我的角色,我的政策,S3 bucket和cross-account信任關係。

磚用戶創建存儲憑證統一目錄必須:

  • 是一個磚賬戶管理。

磚用戶創建外部位置在統一目錄必須:

  • 是一個metastore管理員或用戶創建外部位置特權。

在您創建一個外部位置統一目錄,你可以可以授予以下權限:

  • 創建

  • 文件

  • 文件

這些使磚用戶訪問數據的權限管理雲存儲在S3中沒有憑據進行身份驗證。

有關更多信息,請參見管理外部位置和存儲憑證

訪問S3 bucket統一目錄外的位置

使用完全限定的S3的URI來訪問數據安全與統一目錄。由於統一權限管理目錄,您不需要傳遞任何附加選項或配置進行身份驗證。

警告

統一目錄訪問數據時忽略了火花配置設置由外部的位置。

閱讀的例子:

dbutilsfsls(“s3: / /桶/外部位置的路徑/ /數據”)火花格式(“鋪”)負載(“s3: / /桶/外部位置的路徑/ /數據”)火花sql(“SELECT * FROM parquet. s3: / /桶/外部位置的/道路/ /數據的“)

寫作的例子:

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

創建外部表的例子:

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

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

可以加載我的角色在磚和附加實例配置文件的配置文件實例集群控製數據訪問S3。磚時建議使用實例配置文件統一目錄不可用對你的環境或工作負載。教程使用實例配置文件和數據磚,明白了S3訪問配置實例配置文件

AWS用戶創建我的角色必須:

  • 是一個AWS帳戶用戶與權限創建或更新我的角色,我的政策,S3 bucket和cross-account信任關係。

磚用戶添加我作為一個實例配置文件在磚必須:

  • 是一個工作空間管理

一旦實例配置文件添加到您的工作空間,您可以授予用戶,組,或服務主體權限啟動集群實例配置文件。看到在磚管理實例配置文件訪問

使用兩個集群訪問控製和筆記本一起訪問控製保護訪問實例配置文件。看到集群訪問控製工作區對象訪問控製

訪問S3 bucket uri和AWS鍵

你可以設置屬性來配置一個火花AWS訪問S3鍵。

磚建議使用秘密的範圍來存儲所有的憑證。能給予用戶、服務主體和組織您的工作區中獲得閱讀的秘密範圍。這保護了AWS關鍵,同時允許用戶訪問S3。創建一個秘密範圍,明白了秘密的範圍

憑證可以局限於集群或筆記本。使用兩個集群訪問控製和筆記本一起訪問控製保護訪問S3。看到集群訪問控製工作區對象訪問控製

設置火花屬性,使用以下代碼片段在集群的火花配置設置存儲在AWS鍵秘密範圍作為環境變量:

AWS_SECRET_ACCESS_KEY={{秘密/範圍/aws_secret_access_key}}AWS_ACCESS_KEY_ID={{秘密/範圍/aws_access_key_id}}

然後您可以讀取S3使用以下命令:

aws_bucket_name=“my-s3-bucket”df=火花負載(f“s3a: / /{aws_bucket_name}/花/δ/”)顯示(df)dbutilsfsls(f“s3a: / /{aws_bucket_name}/”)

訪問S3與開源Hadoop選項

磚運行時支持配置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 >#配置不同的公裏加密密鑰為一個特定的桶spark.hadoop.fs.s3a.bucket。< bucket名> .server-side-encryption。關鍵< aws-kms-encryption-key >

訪問請求者支付桶

可以用來訪問請求者支付桶,添加以下行集群火花配置:

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

請注意

磚不支持三角洲湖寫入請求者支付桶。

從磚棄用模式來存儲和訪問數據

以下是棄用存儲模式:

重要的

  • S3A文件係統啟用默認緩存和釋放資源的FileSystem.close ()”。為了避免其他線程使用緩存的引用文件係統錯誤,沒有明確使用“FileSystem.close ()。

  • S3A文件係統不移除目錄標記時關閉輸出流。遺留應用程序基於Hadoop版本不包括hadoop - 13230可以誤解他們即使裏麵有文件為空目錄。