

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 PrivateLink 适用于 Amazon S3 的 DistCp AWS 将数据从本地 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*

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

此模式演示了如何使用适用于亚马逊简单存储服务 (Amazon S3) 的 Apache 开源工具，将几乎任意数量的数据从本地 Apache Hadoop 环境迁移到 PrivateLink 亚马逊网络服务 ([DistCp](https://hadoop.apache.org/docs/r1.2.1/distcp.html)AWS) 云。您可以使用 [AWS PrivateLink for Amazon S3 通过本地数据中心和亚马逊](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)虚拟私有云 (Amazon VPC) 之间的私有网络连接将数据迁移到 Amazon S3，而不必使用公共互联网或代理解决方案迁移数据。如果您在 Amazon Route 53 中使用 DNS 条目或在本地 Hadoop 集群的所有节点的 **/etc/hosts** 文件中添加条目，则系统会自动将您定向到正确的接口端点。

本指南提供了使用 DistCp 将数据迁移到 AWS 云的说明。 DistCp 是最常用的工具，但还有其他迁移工具可用。[例如，您可以使用离线 AWS 工具，例如 AWS Snowb [all 或 AWS Snowm](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/aws-snow-family.html#aws-snowball)[obile，也可以使用 AWS St](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/aws-snow-family.html#aws-snowmobile) orage [Gateway 或 AWS 等在线 AWS](https://docs.aws.amazon.com/storagegateway/latest/userguide/migrate-data.html) 工具。 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>

**先决条件**
+ 在您的本地数据中心与 Amazon Web Services Cloud 之间建立私网连接的有效的 Amazon Web Services account
+ [Hadoop](https://hadoop.apache.org/releases.html)，安装在本地使用 [DistCp](https://hadoop.apache.org/docs/r1.2.1/distcp.html)
+ 有权访问 Hadoop Distributed File System (HDFS) 中的迁移数据的 Hadoop 用户
+ AWS 命令行界面（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) 限制适用于 AWS f PrivateLink or Amazon S3。有关更多信息，请参阅[接口终端节点属性和限制以及](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 文档）。

AWS PrivateLink for Amazon S3 不支持以下内容：
+ [美国联邦信息处理标准 (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)

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

**源技术堆栈**
+ 已安装的 Hadoop 集群 DistCp 

**目标技术堆栈**
+ Amazon S3
+ Amazon VPC

**目标架构**

![Hadoop 集群通过 Dire DistCp ct Connect 将数据从本地环境复制到 S3。](http://docs.aws.amazon.com/zh_cn/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 接口终端节点将数据复制到亚马逊 S3。

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

**Amazon Web Services**
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 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 Cloud
<a name="migrate-data-to-the-aws-cloud"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 AWS 创建适用于 Amazon S3 PrivateLink 的终端节点。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/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_cn/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 在您在 Amazon VPC 控制台中选定端点的**子网**选项卡上看到的两个 IP 地址之间交替出现。 | 网络管理员、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 网站）。<br />选择以下配置选项之一：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/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 文档中的[如何获取 IAM 角色的凭证以用于对 Amazon Web Services account 的 CLI 访问](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html)（AWS Single Sign-On 后续任务）。<br />要使用临时凭证，请将临时凭证添加到凭证文件中，或运行以下命令将凭证导出到您的环境中：<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><br />如您使用传统的访问密钥和私有密钥组合，请运行以下命令：<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>当您在 AWS for Amazon S3 中使用 DistCp 命令时，不会自动发现终端节点 PrivateLink 的 AWS 区域。Hadoop 3.3.2 及更高版本通过启用显式设置 S3 存储桶的 AWS 区域的选项来解决此问题。有关更多信息，请参阅 [S3A 添加选项 fs.s3a.endpoint.region 设置 AWS 区域](https://issues.apache.org/jira/browse/HADOOP-17705)（Hadoop 网站）。<br />有关其他 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 将不需要这种解决方法。<br />如果您在 Amazon S3 上遇到签名问题，请添加使用签名版本 4（SigV4）签名选项：<pre>-Dmapreduce.map.java.opts="-Dcom.amazonaws.services.s3.enableV4=true"</pre> | 迁移工程师、AWS 管理员 | 