本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用与 Amazon S3 DistCp 一起AWS PrivateLink 将数据从本地 Hadoop 环境迁移到 Amazon S3
由杰森·欧文斯 (AWS)、安德烈斯·坎托 ()、杰夫·克洛普芬斯坦 (AWS)、布鲁诺·罗查·奥利维拉 (AWS) 和塞缪尔·施密特 () 创作 AWS AWS
环境:生产 | 来源:Hadoop | 目标:任意 |
R 类型:更换平台 | 工作负载:开源 | 技术:存储和备份;分析 |
AWS服务:亚马逊 S3;亚马逊 EMR |
Summary
此模式演示了如何使用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。
先决条件和限制
先决条件
限制
虚拟私有云 (VPC) 限制适用AWS PrivateLink 于 Amazon S3。有关更多信息,请参阅接口终端节点属性以及限制和AWS PrivateLink 配额(AWS PrivateLink 文档)。
AWS PrivateLink 适用于 Amazon S3 不支持以下内容:
架构
源技术堆栈
目标技术堆栈
目标架构
该图显示了 Hadoop 管理员 DistCp 如何使用私有网络连接(例如 Direct C AWS onnect)将数据从本地环境复制到 Amazon S3,通过 Amazon S3 接口终端节点。
AWS服务
其他工具
操作说明
任务 | 描述 | 所需技能 |
---|
为 Amazon S3 创建终端节点。AWS PrivateLink | 登录AWS管理控制台并打开 Amazon VPC 控制台。 在导航窗格中,选择端点,然后选择创建端点。 对于服务类别,选择 AWS 服务。 在搜索框中,输入 s3,然后按 Enter。 在搜索结果中,选择 com.amazonaws。 < your-aws-region >.s3 服务名称,其中 “类型” 列中的值为 “接口”。 对于 VPC,请选择你的VPC。对于子网,选择您的子网。 对于安全组,选择或创建允许 TCP 443 的安全组。 根据要求添加标签,然后选择创建端点。
| AWS管理员 |
验证端点并找到条DNS目。 | 打开 Amazon VPC 控制台,选择终端节点,然后选择您之前创建的终端节点。 在 “详细信息” 选项卡上,找到第一个DNS名称DNS条目。这是地区条DNS目。使用此DNS名称时,请求会在特定于可用区的DNS条目之间交替出现。 选择子网选项卡。您可以在每个可用区中找到端点弹性网络接口的地址。
| 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 或 s3.<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管理员 |