我想将大量数据从 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 console(Amazon EMR 控制台),然后选择 Clusters(集群)。
2. 从列表中选择 Amazon EMR 集群,然后选择 Steps。
3. 选择 Add step,然后选择以下选项:
对于 Step type,选择 Custom JAR。
对于 Name,输入 S3DistCp 步骤的名称。
对于 JAR location(JAR 位置),输入 command-runner.jar。有关更多信息,请参阅在 Amazon EMR 集群上运行命令和脚本。
对于 Arguments(参数),输入与以下选项类似的选项: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 处理该步骤时 Hadoop 的标准错误通道。
stdout:Hadoop 处理该步骤时 Hadoop 的标准输出通道。
如果无法在步骤日志中找到失败的根本原因,请查看 S3DistCp 任务日志:
1. 打开 Amazon EMR 控制台,然后选择 Clusters(集群)。
2. 从列表中选择 EMR 集群,然后选择 Steps(步骤)。
3. 在 Log files(日志文件)列中,选择 View jobs(查看作业)。
4. 在 Actions 列中,选择 View tasks。
5. 如果任务失败,选择 View attempts(查看尝试)查看任务日志。
常见错误
Reducer 任务因内存不足而失败:
如果在步骤的 stderr 日志中看到与以下错误消息类似的错误消息,则表示 S3DistCp 任务因内存不足而无法处理 Reducer 任务:
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.
要解决此问题,请使用以下选项之一增加 Reducer 任务的内存资源:
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
要解决此问题,请参阅 权限错误。
相关信息
查看日志文件