我想将大量数据从 Amazon Simple Storage Service (Amazon S3) 复制到我的 Amazon EMR 集群。
简短描述
使用 S3DistCp 在 Amazon S3 和 Amazon EMR 集群之间复制数据。默认情况下,S3DistCp 安装在 Amazon EMR 集群上。要调用 S3DistCp,请在启动时或集群运行后将其添加为步骤。
解决方法
要使用 AWS 命令行界面 (AWS CLI) 向正在运行的集群添加 S3DistCp 步骤,请参阅将 S3DistCp 作为步骤添加到集群中。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
要使用控制台添加 S3DistCp 步骤,请执行以下操作:
1.打开 Amazon EMR 控制台,然后选择 Clusters(集群)。
2.从列表中选择 Amazon EMR 集群,然后选择 Steps(步骤)。
3.选择 Add step(添加步骤),然后选择以下选项:
对于 Step type(步骤类型),选择 Custom JAR(自定义 JAR)。
对于 Name(名称),输入 S3DistCp 步骤的名称。
对于 JAR location(JAR 位置),请输入 command-runner.jar。有关详细信息,请参阅在 Amazon EMR 集群上运行命令和脚本。
对于 Arguments(参数),输入与以下内容类似的 options(选项):s3-dist-cp --src=s3://s3distcp-source/input-data --dest=hdfs:///output-folder1。
对于 Action on failure(失败时的操作),选择 Continue(继续)。
4.选择 Add(添加)。
5.当步骤 Status(状态)更改为 Completed(已完成)时,验证文件是否已复制到集群:
$ hadoop fs -ls hdfs:///output-folder1/
**注意:**最佳做法是使用 groupBy 选项将小文件聚合成较少的大文件,然后使用 outputCodec 选项压缩大文件。
故障排除
要对 S3DistCp 的问题进行故障排除,请查看步骤和任务日志。
1.打开 Amazon EMR 控制台,然后选择 Clusters(集群)。
2.从列表中选择 EMR 集群,然后选择 Steps(步骤)。
3.在 Log files(日志文件)列中,选择相应的步骤日志:
controller: 有关该步骤处理的信息。如果您的步骤在加载时失败,则可以在此日志中找到堆栈跟踪。
syslog: 来自非 Amazon 软件的日志,例如 Apache 和 Hadoop。
stderr: Hadoop 处理该步骤时的标准错误通道。
stdout: Hadoop 处理该步骤时的标准输出通道。
如果您无法在步骤日志中找到失败的根本原因,请查看 S3DistCp 任务日志:
1.打开 Amazon EMR 控制台,然后选择 Clusters(集群)。
2.从列表中选择 EMR 集群,然后选择 Steps(步骤)。
3.在 Log files(日志文件)列中,选择 View jobs(查看作业)。
4.在 Actions(操作)列中,选择 View tasks(查看任务)。
5.如果有失败的任务,请选择 View attempts(查看尝试)以查看任务日志。
常见错误
由于内存不足,减速器任务失败:
如果您在步骤的 stderr 日志中看到类似以下内容的错误消息,则 S3DistCp 作业失败,因为没有足够的内存来处理减速器任务:
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Container [pid=19135,containerID=container_1494287247949_0005_01_000003] is running beyond virtual memory limits. Current usage: 569.0 MB of 1.4 GB physical memory used; 3.0 GB of 3.0 GB virtual memory used. Killing container.
要解决此问题,请使用以下选项之一来增加减速器任务的内存资源:
Amazon S3 权限错误:
如果您在步骤的 stderr 日志中看到类似以下内容的错误消息,则说明由于权限问题,S3DistCp 任务无法访问 Amazon S3:
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID
要解决此问题,请参阅权限错误。
相关信息
查看日志文件