使用与 Amazon S3 DistCp 一起AWS PrivateLink 将数据从本地 Hadoop 环境迁移到 Amazon S3 - AWS Prescriptive Guidance

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

使用与 Amazon S3 DistCp 一起AWS PrivateLink 将数据从本地 Hadoop 环境迁移到 Amazon S3

由杰森·欧文斯 (AWS)、安德烈斯·坎托 ()、杰夫·克洛普芬斯坦 (AWS)、布鲁诺·罗查·奥利维拉 (AWS) 和塞缪尔·施密特 () 创作 AWS AWS

环境:生产

来源:Hadoop

目标:任意

R 类型:更换平台

工作负载:开源

技术:存储和备份;分析

AWS服务:亚马逊 S3;亚马逊 EMR

此模式演示了如何使用DistCp适用于亚马逊简单存储服务 (Amazon S3AWS) 的 Apache 开源工具,将几乎任意数量的数据从本地 Apache Hadoop 环境迁移到AWS PrivateLink 亚马逊网络服务 () 云。您可以使用 AWS PrivateLink Amazon S3 通过本地数据中心和亚马逊虚拟私有云 (AmazonVPC) 之间的私有网络连接将数据迁移到 Amazon S3,而不是使用公共互联网或代理解决方案迁移数据。如果您使用 DNS Amazon Route 53 中的条目或在本地 Hadoop 集群的所有节点的 /etc/hosts 文件中添加条目,则系统会自动将您定向到正确的接口终端节点。

本指南提供了 DistCp 用于将数据迁移到AWS云端的说明。 DistCp 是最常用的工具,但还有其他迁移工具可用。例如,你可以使用 Snowb AWSall 或 Snow mobile 等离线AWS工具,也可以使用 Storage Gateway 等在线工具,或者使用 AWS Storag AWSe Gateway AWS 或。AWS DataSync此外,你可以使用其他开源工具,比如 Apache NiFi

先决条件

  • 在您的本地数据中心和AWS云之间具有私有网络连接的活跃AWS账户

  • Hadoop,安装在本地使用 DistCp

  • 有权访问 Hadoop 分布式文件系统中的迁移数据的 Hadoop 用户 () HDFS

  • AWS命令行界面 (AWSCLI),已安装配置

  • 用于将对象放入 S3 存储桶的权限

限制

虚拟私有云 (VPC) 限制适用AWS PrivateLink 于 Amazon S3。有关更多信息,请参阅接口终端节点属性以及限制AWS PrivateLink 配额(AWS PrivateLink 文档)。

AWS PrivateLink 适用于 Amazon S3 不支持以下内容:

源技术堆栈

  • 已安装的 Hadoop 集群 DistCp

目标技术堆栈

  • Amazon S3

  • Amazon VPC

目标架构

Hadoop 集群通过 Dire DistCp ct Connect 将数据从本地环境复制到 S3。

该图显示了 Hadoop 管理员 DistCp 如何使用私有网络连接(例如 Direct C AWS onnect)将数据从本地环境复制到 Amazon S3,通过 Amazon S3 接口终端节点。

AWS服务

其他工具

  • Apache Hadoop DistCp(分布式副本)是一种用于复制大型集群间和集群内部的工具。 DistCp 使用 Apache MapReduce 进行分发、错误处理和恢复以及报告。

任务描述所需技能

为 Amazon S3 创建终端节点。AWS PrivateLink

  1. 登录AWS管理控制台并打开 Amazon VPC 控制台

  2. 在导航窗格中,选择端点,然后选择创建端点

  3. 对于服务类别,选择 AWS 服务

  4. 在搜索框中,输入 s3,然后按 Enter

  5. 在搜索结果中,选择 com.amazonaws。 < your-aws-region >.s3 服务名称,其中 “类型” 列中的值为 “接口”。

  6. 对于 VPC,请选择你的VPC。对于子网,选择您的子网。

  7. 对于安全组,选择或创建允许 TCP 443 的安全组。

  8. 根据要求添加标签,然后选择创建端点

AWS管理员

验证端点并找到条DNS目。

  1. 打开 Amazon VPC 控制台,选择终端节点,然后选择您之前创建的终端节点。

  2. 在 “详细信息” 选项卡上,找到第一个DNS名称DNS条目。这是地区条DNS目。使用此DNS名称时,请求会在特定于可用区的DNS条目之间交替出现。

  3. 选择子网选项卡。您可以在每个可用区中找到端点弹性网络接口的地址。

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 Ama VPC zon 控制台中选定终端节点的子网选项卡上看到的两个 IP 地址之间交替出现。

网络管理员、AWS管理员

配置名称解析。

您必须配置名称解析以允许 Hadoop 访问 Amazon S3 接口端点。不能使用端点名称本身。相反,您必须解决 <your-bucket-name>.s3.<your-aws-region>.amazonaws.com*.s3.<your-aws-region>.amazonaws.com。有关此命名限制的更多信息,请参阅 Hadoop S3A 客户端简介(Hadoop 网站)。

选择以下配置选项之一:

  • 使用本地DNS解析终端节点的私有 IP 地址。您可覆盖所有存储桶或选定存储桶的行为。有关更多信息,请参阅使用安全混合访问 Amazon S3 中的 “选项 2:使用域名系统响应策略区域 (DNSRPZ) 访问 Amazon S3” AWS PrivateLink(AWS博客文章)。

  • DNS将本地配置为有条件地将流量转发到解析器中的入站终端节点。VPC流量被转发至 Route 53。有关更多信息,请参阅使用安全混合访问亚马逊 S 3 中的 “选项 3:使用 Amazon Route 53 Resolver 入站终端节点转发来自本地的DNS请求” AWS PrivateLink(AWS博客文章)。

  • 编辑 Hadoop 集群中所有节点上的 /etc/hosts 文件。这是临时测试解决方案,不建议用于生产。要编辑 /etc/hosts 文件,请为 <your-bucket-name>.s3.<your-aws-region>.amazonaws.com.rproxy.goskope.coms3.<your-aws-region>.amazonaws.com 添加一个条目。/etc/hosts 文件不能为一个条目设置多个 IP 地址。您必须从可用区之一选择单个 IP 地址,这将成为单点故障。

AWS管理员

为 Amazon S3 配置身份验证。

要通过 Hadoop 对 Amazon S3 进行身份验证,我们建议您将临时角色凭证导出到 Hadoop 环境。有关更多信息,请参阅使用 S3 执行身份验证(Hadoop 网站)。对于长时间运行的作业,您可创建用户并分配仅有权将数据放入 S3 存储桶的策略。访问密钥和私有密钥可以存储在 Hadoop 上,只有 DistCp 任务本身和 Hadoop 管理员才能访问。有关存储密钥的更多信息,请参阅使用 Hadoop 凭证提供程序存储机密(Hadoop 网站)。有关其他身份验证方法的更多信息,请参阅 Ident AWS IAM ity Center(Sing AWS le Sign-On 的继任者)文档中的 “如何获取用于CLI访问AWS帐户的IAM角色凭证”。

要使用临时凭证,请将临时凭证添加到凭证文件中,或运行以下命令将凭证导出到您的环境中:

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>

注意:当您对 Amazon S3 使用 DistCp 命令时,不会自动发现终端节点AWS PrivateLink 的AWS区域。Hadoop 3.3.2 及更高版本通过启用显式设置 S3 存储桶AWS区域的选项来解决此问题。有关更多信息,请参阅 S3A 以添加选项 fs.s3a.endpoint.region 来设置区域(Hadoop 网站)。AWS

有关其他 S3A 提供商的更多信息,请参阅常规 S3A 客户端配置(Hadoop 网站)。例如,如果您使用加密,则可根据您的加密类型将以下选项添加到上述一系列命令中:

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

注意:要在 S3A 中使用接口终端节点,必须为接口终端节点的 S3 区域名称(例如s3.<your-aws-region>.amazonaws.com)创建DNS别名条目。有关说明,请参阅为 Amazon S3 配置身份验证部分。Hadoop 3.3.2 及以前版本需要使用此解决方法。未来版本的 S3A 将不需要这种解决方法。

如果您在 Amazon S3 上遇到签名问题,请添加使用签名版本 4(SigV4)签名选项:

-Dmapreduce.map.java.opts="-Dcom.amazonaws.services.s3.enableV4=true"
迁移工程师、AWS管理员