

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

# 使用 DistCp 搭配適用於 Amazon S3 的 AWS PrivateLink，將資料從內部部署 Hadoop 環境遷移至 Amazon S3
<a name="migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3"></a>

*Jason Owens、Andres Cantor、Jeff Klopfenstein、Bruno Rocha Oliveira 和 Samuel Schmidt，Amazon Web Services*

## 總結
<a name="migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3-summary"></a>

此模式示範如何使用 Apache 開放原始碼工具 [DistCp](https://hadoop.apache.org/docs/r1.2.1/distcp.html) 搭配 AWS PrivateLink for Amazon Simple Storage Service (Amazon S3)，將幾乎任何數量的資料從現場部署 Apache Hadoop 環境遷移至 Amazon Web Services (AWS) 雲端。您可以使用適用於 [Amazon S3 的 AWS PrivateLink](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)，透過內部部署資料中心和 Amazon Virtual Private Cloud (Amazon VPC) 之間的私有網路連線將資料遷移至 Amazon S3，而不是使用公有網際網路或代理解決方案來遷移資料。 Amazon Virtual Private Cloud 如果您在 Amazon Route 53 中使用 DNS 項目，或在內部部署 Hadoop 叢集的所有節點的 **/etc/hosts** 檔案中新增項目，則會自動將您導向正確的介面端點。

本指南提供使用 DistCp 將資料遷移至 AWS 雲端的說明。DistCp 是最常用的工具，但還有其他遷移工具可用。例如，您可以使用離線 AWS 工具，例如 [AWS Snowball](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/aws-snow-family.html#aws-snowball) 或 [AWS Snowmobile](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/aws-snow-family.html#aws-snowmobile)，或線上 AWS 工具，例如 [AWS Storage Gateway](https://docs.aws.amazon.com/storagegateway/latest/userguide/migrate-data.html) 或 [AWS DataSync](https://aws.amazon.com/about-aws/whats-new/2021/11/aws-datasync-hadoop-aws-storage-services/)。此外，您可以使用其他開放原始碼工具，例如 [Apache NiFi](https://nifi.apache.org/)。

## 先決條件和限制
<a name="migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3-prereqs"></a>

**先決條件**
+ 在內部部署資料中心與 AWS 雲端之間具有私有網路連線的作用中 AWS 帳戶
+ [Hadoop](https://hadoop.apache.org/releases.html)，使用 [DistCp](https://hadoop.apache.org/docs/r1.2.1/distcp.html) 安裝在內部部署
+ 可存取 Hadoop 分散式檔案系統 (HDFS) 中遷移資料的 Hadoop 使用者
+ AWS Command Line Interface (AWS CLI)，[已安裝](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)並[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ 將物件放入 S3 儲存貯體的[許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket-console.html) 

**限制**

虛擬私有雲端 (VPC) 限制適用於 Amazon S3 的 AWS PrivateLink。如需詳細資訊，請參閱[介面端點屬性和限制](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)以及 [AWS PrivateLink 配額](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html) (AWS PrivateLink 文件）。

Amazon S3 的 AWS PrivateLink 不支援下列項目：
+ [聯邦資訊處理標準 (FIPS) 端點](https://aws.amazon.com/compliance/fips/)
+ [網站端點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteEndpoints.html)
+ [舊版全域端點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#deprecated-global-endpoint)

## Architecture
<a name="migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3-architecture"></a>

**來源技術堆疊**
+ 安裝 DistCp 的 Hadoop 叢集

**目標技術堆疊**
+ Amazon S3
+ Amazon VPC

**目標架構**

![\[具有 DistCp 的 Hadoop 叢集會透過 Direct Connect to S3 從內部部署環境複製資料。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/8d2b47ae-e854-4e5d-8f19-b9c2606f2c59/images/b8a249bd-307b-41ec-b939-5039d0ae7123.png)


下圖顯示 Hadoop 管理員如何使用 DistCp，透過私有網路連線，例如 AWS Direct Connect，透過 Amazon S3 介面端點將資料從內部部署環境複製到 Amazon S3。

## 工具
<a name="migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3-tools"></a>

**AWS 服務**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 可透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一種雲端型物件儲存服務，可協助您儲存、保護和擷取任何數量的資料。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 可協助您在已定義的虛擬網路中啟動 AWS 資源。這個虛擬網路類似於您在自己的資料中心內操作的傳統網路，具有使用可擴展的 AWS 基礎設施的優勢。

**其他工具**
+ [Apache Hadoop DistCp](https://hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html) （分散式複本） 是一種用於複製大型叢集間和叢集內的工具。DistCp 使用 Apache MapReduce 進行分佈、錯誤處理和復原，以及報告。

## 史詩
<a name="migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3-epics"></a>

### 將資料遷移至 AWS 雲端
<a name="migrate-data-to-the-aws-cloud"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 為 Amazon S3 的 AWS PrivateLink 建立端點。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3.html) | AWS 管理員 | 
| 驗證端點並尋找 DNS 項目。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3.html) | AWS 管理員 | 
| 檢查防火牆規則和路由組態。 | 若要確認您的防火牆規則已開啟且您的聯網組態已正確設定，請使用 Telnet 在連接埠 443 上測試端點。例如：<pre>$ telnet vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com 443<br /><br />Trying 10.104.88.6...<br /><br />Connected to vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com.<br /><br />...<br /><br />$ telnet vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com 443<br /><br />Trying 10.104.71.141...<br /><br />Connected to vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com.</pre>如果您使用區域項目，則成功測試會顯示 DNS 正在交替兩個 IP 地址，您可以在 Amazon VPC 主控台中所選端點的**子網路**索引標籤上看到這些地址。 | 網路管理員、AWS 管理員 | 
| 設定名稱解析。 | 您必須設定名稱解析，以允許 Hadoop 存取 Amazon S3 介面端點。您無法使用端點名稱本身。反之，您必須解析 `<your-bucket-name>.s3.<your-aws-region>.amazonaws.com`或 `*.s3.<your-aws-region>.amazonaws.com`。如需此命名限制的詳細資訊，請參閱 [Hadoop S3A 用戶端簡介](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Introducing_the_Hadoop_S3A_client.) (Hadoop 網站）。選擇下列其中一個組態選項：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3.html) | AWS 管理員 | 
| 設定 Amazon S3 的身分驗證。 | 若要透過 Hadoop 驗證 Amazon S3，建議您將暫時角色登入資料匯出至 Hadoop 環境。如需詳細資訊，請參閱[使用 S3 驗證](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Authenticating_with_S3) (Hadoop 網站）。對於長時間執行的任務，您可以建立使用者，並指派具有將資料僅放入 S3 儲存貯體之許可的政策。存取金鑰和私密金鑰可以存放在 Hadoop 上，僅供 DistCp 任務本身和 Hadoop 管理員存取。如需存放秘密的詳細資訊，請參閱[使用 Hadoop 登入資料提供者存放秘密 ](https://hadoop.apache.org/docs/r3.1.1/hadoop-aws/tools/hadoop-aws/index.html#hadoop_credential_providers)(Hadoop 網站）。如需其他身分驗證方法的詳細資訊，請參閱 [AWS IAM Identity Center (AWS Single Sign-On 的後續版本） 文件中的如何取得 IAM 角色的登入資料，以搭配 CLI 存取 AWS 帳戶](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html)。 AWS Single Sign-On若要使用臨時登入資料，請將臨時登入資料新增至您的登入資料檔案，或執行下列命令將登入資料匯出至您的環境：<pre>export AWS_SESSION_TOKEN=SECRET-SESSION-TOKEN<br />export AWS_ACCESS_KEY_ID=SESSION-ACCESS-KEY<br />export AWS_SECRET_ACCESS_KEY=SESSION-SECRET-KEY</pre>如果您有傳統的存取金鑰和私密金鑰組合，請執行下列命令：<pre>export AWS_ACCESS_KEY_ID=my.aws.key<br />export AWS_SECRET_ACCESS_KEY=my.secret.key</pre>如果您使用存取金鑰和私密金鑰組合，請將 DistCp 命令中的登入資料提供者從 變更為 `"org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider"` `"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"`。 | AWS 管理員 | 
| 使用 DistCp 傳輸資料。 | 若要使用 DistCp 傳輸資料，請執行下列命令：<pre>hadoop distcp -Dfs.s3a.aws.credentials.provider=\<br />"org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \<br />-Dfs.s3a.access.key="${AWS_ACCESS_KEY_ID}" \<br />-Dfs.s3a.secret.key="${AWS_SECRET_ACCESS_KEY}" \<br />-Dfs.s3a.session.token="${AWS_SESSION_TOKEN}" \<br />-Dfs.s3a.path.style.access=true \<br />-Dfs.s3a.connection.ssl.enabled=true \<br />-Dfs.s3a.endpoint=s3.<your-aws-region>.amazonaws.com \<br />hdfs:///user/root/ s3a://<your-bucket-name></pre>當您搭配 Amazon S3 的 AWS PrivateLink 使用 DistCp 命令時，不會自動探索端點的 AWS 區域。Hadoop 3.3.2 和更新版本透過啟用 選項明確設定 S3 儲存貯體的 AWS 區域來解決此問題。如需詳細資訊，請參閱 [S3A 以新增選項 fs.s3a.endpoint.region 以設定 AWS 區域 ](https://issues.apache.org/jira/browse/HADOOP-17705)(Hadoop 網站）。如需其他 S3A 提供者的詳細資訊，請參閱[一般 S3A 用戶端組態](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#General_S3A_Client_configuration) (Hadoop 網站）。例如，如果您使用加密，您可以根據您的加密類型，將下列選項新增至上述一系列命令：<pre>-Dfs.s3a.server-side-encryption-algorithm=AES-256 [or SSE-C or SSE-KMS]</pre>若要搭配 S3A 使用介面端點，您必須為介面端點的 S3 區域名稱 （例如 `s3.<your-aws-region>.amazonaws.com`) 建立 DNS 別名項目。如需說明，請參閱*設定 Amazon S3 的身分驗證*一節。Hadoop 3.3.2 和舊版需要此解決方法。未來的 S3A 版本不需要此解決方法。如果您有 Amazon S3 的簽章問題，請新增選項以使用簽章版本 4 (SigV4) 簽署：<pre>-Dmapreduce.map.java.opts="-Dcom.amazonaws.services.s3.enableV4=true"</pre> | 遷移工程師、AWS 管理員 | 