Amazon EMR 操作期间的集群输入和输出错误
以下是集群输入与输出操作中的常见错误。使用本主题中的指南进行问题排查并检查配置。
主题
您的 Amazon Simple Storage Service(Amazon S3)路径中是否至少有三个斜杠?
在指定 Amazon S3 存储桶时,必须在 URL 的末尾加上终止斜杠。例如,您应该使用 "s3n://amzn-s3-demo-bucket1/" 而不是 "s3n://amzn-S3-demo-bucket1/" 来引用存储桶,否则 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 中使用 "amzn-s3-demo-bucket1.1" 之类的存储桶名称,集群将会失败,因为 Amazon EMR 要求存储桶名称是有效的 RFC 2396 主机名;名称不能以数字结尾。另外,根据 Hadoop 的要求,与 Amazon EMR 一起使用的 Amazon S3 存储桶名称必须仅包含小写字母、数字、英文句点(.)和连字符(-)。有关如何格式化 Amazon S3 存储桶名称的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的存储桶限制。
您在向 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 的推测执行功能。当您排除速度很慢的集群故障时,这也非常有用。您可以通过将
mapreduce.map.speculative
和mapreduce.reduce.speculative
属性设置为false
来执行此操作。在您启动集群时,您可以使用mapred-env
配置分类来设置这些值。有关更多信息,请参阅 Amazon EMR 发行版指南中的配置应用程序。 -
如果您运行的是 Hive 集群,请参阅 您是否有关于在 Amazon S3 与 Hive 之间加载数据的问题?。
有关 Amazon S3 权限的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 Amazon S3 错误最佳实践。