Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

输入与输出错误

以下是集群输入与输出操作中的常见错误。

您的 Amazon Simple Storage Service (Amazon S3) 路径是否拥有至少三个斜杠?

在指定 Amazon S3 存储段时,必须在 URL 的末尾加上终止斜杠。举例来说,不要以下列格式引用存储桶“s3n://myawsbucket”,而应使用“s3n://myawsbucket/”,否则 Hadoop 会在大多数情况下导致集群失败。

您是否正在尝试以递归的方式遍历输入目录?

Hadoop 不会以递归的方式搜索文件的输入目录。如果您拥有 /corpus/01/01.txt、/corpus/01/02.txt、/corpus/02/01.txt 等目录结构,且指定 /corpus/ 作为集群的输入参数,则 Hadoop 将找不到任何输入文件,因为 /corpus/ 目录为空,且 Hadoop 不会查看子目录的内容。同样地,Hadoop 不会以递归的方式查看 Amazon S3 存储段的子目录。

输入文件必须直接放入您指定的输入目录或者 Amazon S3 存储段中,而不是子目录中。

您的输出目录是否已经存在?

如果您指定的输出路径已经存在,Hadoop 会在大多数情况下导致集群失败。这意味着如果您运行集群一次,并使用完全相同的参数再运行一次,那么第一次正常很可能运行,但后面的运行就再也不会成功;因为在第一次运行后,会出现输出路径,这导致所有后续的运行失败。

您是否尝试指定一个使用 HTTP URL 的资源?

Hadoop 不接受使用 http:// 前缀指定的资源位置。您不能使用 HTTP URL 引用资源。例如,以 http://mysite/myjar.jar 作为 JAR 参数进行传递会导致集群失败。

您是否在使用无效名称格式引用 Amazon S3 存储段?

如果您尝试在 Amazon EMR 中使用诸如“myawsbucket.1”的存储桶名称,那么集群会失败,因为 Amazon EMR 要求存储桶名称必须是有效的 RFC 2396 主机名称;名称不能以数字结尾。另外,还因为 Hadoop 的要求,与 Amazon EMR 一起使用的 Amazon S3 存储段名称必须仅仅包含小写字母、数字、英文句点 (.) 和连字符 (-)。有关如何设置 Amazon S3 存储桶名称格式的更多信息,请参阅 Amazon Simple Storage Service Developer Guide 中的存储桶限制

您在向 Amazon S3 装载数据或者从中移出数据时是否遇到问题?

Amazon S3 是最普及的 Amazon EMR 输入与输出源。常见的错误是将 Amazon S3 当做典型的文件系统进行处理。Amazon S3 和文件系统之间存在区别,在运行集群时必须予以考虑。

  • 如果 Amazon S3 中出现内部错误,您的应用程序必须顺利地予以处理,并重试该操作。

  • 如果调用 Amazon S3 的返回时间太长,那么,您的应用程序可能必须降低调用 Amazon S3 的频率。

  • 列出 Amazon S3 存储段中的所有数据元是一种成本很高的调用。您的应用程序应该将此类操作的次数降到最低程度。

您可以使用多种方式提高您的集群与 Amazon S3 的交互。

  • 使用 Amazon EMR 的最新发布版本启动您的集群。

  • 使用 S3DistCp 将数据元移进和移出 Amazon S3。S3DistCp 会实施错误处理、重试和回退,以满足 Amazon S3 的要求。有关更多信息,请参阅使用 S3DistCp 的分布式复制

  • 设计应用程序时应考虑最终一致性这一因素。在集群运行时将 HDFS 用于中间数据存储和 Amazon S3,以便仅输入原始数据与输出最终结果。

  • 如果您的集群每秒向 Amazon S3 提交 200 个或更多的事务,请联系支持为每秒更多的事务准备存储桶,并考虑使用 Amazon S3 性能使用技巧和经验中描述的密钥分区策略。

  • 设置 Hadoop 配置设置 io.file.buffer.size 为 65536。这可让 Hadoop 在 Amazon S3 数据元中搜索时花费较少的时间。

  • 如果您的集群遇到 Amazon S3 并发问题,请考虑禁用 Hadoop 的推测执行功能。您可以通过 mapred.map.tasks.speculative.execution 和 mapred.reduce.tasks.speculative.execution 配置设置做到这点。当您排除速度很慢的集群故障时,这也非常有用。

  • 如果您运行的是 Hive 集群,请参阅 您是否有关于在 Amazon S3 与 Hive 之间加载数据的问题?

有关其他信息,请参阅 Amazon Simple Storage Service Developer Guide 中的 Amazon S3 排错最佳实践