使 DistCp 用 PrivateLink 適用於 Amazon S3 的 AWS,將資料從現場部署 Hadoop 環境遷移到 Amazon S3 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使 DistCp 用 PrivateLink 適用於 Amazon S3 的 AWS,將資料從現場部署 Hadoop 環境遷移到 Amazon S3

由傑森·歐文斯(AWS),安德烈斯·坎托爾(AWS),傑夫·克洛普芬斯坦(AWS),布魯諾·羅查奧利維拉和塞繆爾·施密特(AWS)創建

環境:生產

來源:哈多

目標:任何

R 類型:重新平台

工作負載:開源

技術:儲存與備份、分析

AWS 服務:Amazon S3;Amazon EMR

此模式示範如何透過使用 PrivateLink 適用於亞馬遜簡單儲存服務 (Amazon S3) 的 Apache 開放原始碼工具DistCp搭配使用 Apache 開放原始碼工具,將幾乎任何數量的資料從現場部署 Apache Hadoop 環境遷移到亞馬遜網路服務 (AWS) 雲端。您可以使用 Amazon S3 的 AWS PrivateLink ,透過現場部署資料中心和 Amazon Amazon Virtual Private Cloud (Amazon VPC) 之間的私有網路連線將資料遷移到 Amazon S3,而不是使用公用網際網路或代理解決方案遷移資料。如果您在 Amazon Route 53 中使用 DNS 項目,或在現場部署 Hadoop 叢集的所有節點的 /etc/hosts 檔案中新增項目,系統會自動將您導向至正確的介面端點。

本指南提供將資料遷移到 AWS 雲端的使 DistCp 用說明。 DistCp 是最常用的工具,但有其他移轉工具可供使用。例如,您可以使用 AWS Snowball 或 AWS 雪地摩托等離線 AWS 工具,或使用 AWS Storage Gateway 或 AWS 等線上 AWS 工具。 DataSync此外,您可以使用其他開源工具,例如 Apache NiFi

先決條件

  • 使用中的 AWS 帳戶,在現場部署資料中心和 AWS 雲端之間具有私有網路連線

  • Hadoop 的,安裝在具有內部設備 DistCp

  • 在 Hadoop 分佈式文件系統(HDFS)訪問遷移數據的 Hadoop 用戶

  • 已安裝設定的 AWS Command Line Interface (AWS CLI) (AWS CLI)

  • 將物件放入 S3 儲存貯體的權限

限制

適用 PrivateLink 於 Amazon S3 的 AWS 適用虛擬私有雲端 (VPC) 限制。如需詳細資訊,請參閱界面端點屬性和限制AWS PrivateLink 配額 (AWS PrivateLink 文件)。

PrivateLink 適用於 Amazon S3 的 AWS 不支援以下功能:

源, 技術, 堆棧

  • 已安裝 DistCp 的 Hadoop 集群

目標技術堆疊

  • Amazon S3

  • Amazon VPC

目標架構

該圖顯示了 Hadoop 管理員如 DistCp 何使用透過 Amazon S3 界面端點,透過私有網路連接 (例如 AWS Direct Connect) 從現場部署環境複製資料到 Amazon S3。

AWS 服務

其他工具

  • 阿帕奇 Hadoop DistCp(分佈式副本)是用於複製大型集群間和內部集群的工具。 DistCp 使用 Apache MapReduce 進行分發,錯誤處理和恢復以及報告。

任務描述所需技能

為 Amazon S3 建立適用 PrivateLink 於 AWS 的端點。

  1. 登入 AWS 管理主控台並開啟 Amazon VPC 主控台

  2. 在瀏覽窗格上,選擇 [端點],然後選擇 [建立端點]。

  3. Service category (服務類別) 中,選擇​ AWS services (AWS 服務)

  4. 在搜尋方塊中,輸入 s3,然後按 Enter 鍵。

  5. 在搜索結果中,選擇喜歡的。 < your-aws-region >.s3 服務名稱,其中「類型」欄中的值為「介面」。

  6. VPC 中,選擇您的 VPC。對於子網路,請選擇您的子網路。

  7. 在安全性群組中,選擇或建立允許 TCP 443 的安全性群組。

  8. 根據您的需求新增標籤,然後選擇 [建立端點]。

AWS 管理員

驗證端點並找到 DNS 項目。

  1. 開啟 Amazon VPC 主控台,選擇端點,然後選取您先前建立的端點。

  2. 在 [詳細資料] 索引標籤上,尋找 DNS 名稱的第一個 DNS 項目。這是區域性 DNS 項目。當您使用此 DNS 名稱時,請求在可用區域特定的 DNS 項目之間進行替代。

  3. 選擇「子網路」頁籤。您可以在每個可用區域中找到端點 elastic network interface 的位址。

AWS 管理員

檢查防火牆規則和路由配置。

若要確認您的防火牆規則已開啟且網路組態已正確設定,請使用 Telnet 在連接埠 443 上測試端點。例如:

$ telnet vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com 443 Trying 10.104.88.6... Connected to vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com. ... $ telnet vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com 443 Trying 10.104.71.141... Connected to vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com.

備註:如果您使用區域項目,則成功測試表明 DNS 會在您在 Amazon VPC 主控台中選取端點的「子網路」索引標籤上看到的兩個 IP 位址之間交替。

網路管理員、AWS 管理員

設定名稱解析。

您必須設定名稱解析,以允許 Hadoop 存取 Amazon S3 介面端點。您無法使用端點名稱本身。相反地,您必須解決<your-bucket-name>.s3.<your-aws-region>.amazonaws.com*.s3.<your-aws-region>.amazonaws.com。如需此命名限制的詳細資訊,請參閱介紹 Hadoop S3A 用戶端 (Hadoop 網站)。

選擇下列其中一個組態選項:

AWS 管理員

設定 Amazon S3 的身份驗證。

若要透過 Hadoop 向 Amazon S3 進行驗證,我們建議您將臨時角色登入資料匯出至 Hadoop 環境。如需詳細資訊,請參閱使用 S3 進行驗證 (Hadoop 網站)。對於長時間執行的任務,您可以建立使用者並指派具有僅將資料放入 S3 儲存貯體的權限的政策。訪問密鑰和密鑰可以存儲在 Hadoop 上,只能訪問 DistCp 作業本身和 Hadoop 管理員。有關存儲秘密的詳細信息,請參閱使用 Hadoop 憑據提供程序存儲秘密(Hadoop 網站)。如需其他身份驗證方法的詳細資訊,請參閱 AWS IAM 身分中心的文件 (AWS 單一登入的後續任務) 中如何取得 IAM 角色的登入資料以用於 AWS 帳戶的 CLI 存取

若要使用臨時身分證明,請將臨時認證新增至您的認證檔案,或執行下列命令,將認證匯出至您的環境:

export AWS_SESSION_TOKEN=SECRET-SESSION-TOKEN export AWS_ACCESS_KEY_ID=SESSION-ACCESS-KEY export AWS_SECRET_ACCESS_KEY=SESSION-SECRET-KEY

如果您有傳統的存取金鑰和私密金鑰組合,請執行下列命令:

export AWS_ACCESS_KEY_ID=my.aws.key export AWS_SECRET_ACCESS_KEY=my.secret.key

注意:如果您使用存取金鑰和私密金鑰組合,請將 DistCp 命令中的認證提供者從變更"org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider""org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"

AWS 管理員

使用傳輸資料 DistCp。

若要用 DistCp 於傳輸資料,請執行下列命令:

hadoop distcp -Dfs.s3a.aws.credentials.provider=\ "org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \ -Dfs.s3a.access.key="${AWS_ACCESS_KEY_ID}" \ -Dfs.s3a.secret.key="${AWS_SECRET_ACCESS_KEY}" \ -Dfs.s3a.session.token="${AWS_SESSION_TOKEN}" \ -Dfs.s3a.path.style.access=true \ -Dfs.s3a.connection.ssl.enabled=true \ -Dfs.s3a.endpoint=s3.<your-aws-region>.amazonaws.com \ hdfs:///user/root/ s3a://<your-bucket-name>

注意:當您將 DistCp 命令與適用 PrivateLink 於 Amazon S3 的 AWS 搭配使用時,不會自動探索端點的 AWS 區域。Hadoop 3.3.2 及更新版本透過啟用明確設定 S3 儲存貯體的 AWS 區域的選項來解決此問題。如需詳細資訊,請參閱 S3A 以新增選項以設定 AWS 區域 (Hadoop 網站)。

如需其他 S3A 提供者的詳細資訊,請參閱一般 S3A 用戶端組態 (Hadoop 網站)。例如,如果您使用加密,則可以根據您的加密類型,將下列選項新增至上述一系列命令中:

-Dfs.s3a.server-side-encryption-algorithm=AES-256 [or SSE-C or SSE-KMS]

備註:若要將介面端點與 S3A 搭配使用,您必須為 S3 區域名稱建立 DNS 別名項目 (例如,s3.<your-aws-region>.amazonaws.com) 到介面端點。如需指示,請參閱設定 Amazon S3 的身分驗證一節。Hadoop 3.3.2 和更早版本需要此因應措施。未來版本的 S3A 不需要此因應措施。

如果您在使用 Amazon S3 時遇到簽名問題,請新增使用簽名版本 4 (SIGv4) 簽署的選項:

-Dmapreduce.map.java.opts="-Dcom.amazonaws.services.s3.enableV4=true"
遷移工程師,AWS 管理員