获取失败次数过多
PDF格式
点燃
步骤或任务尝试日志中存在“太多获取失败”或“读取任务输出错误”错误消息表明正在运行的任务依赖于另一个任务的输出。这通常发生在reduce任务排队执行并且需要一个或多个map任务的输出而输出尚不可用时。
输出可能不可用的原因有多种:
前提任务仍在处理中。这通常是地图任务。
如果数据位于不同的实例上,则可能由于网络连接不佳而导致数据不可用。
如果使用 HDFS 检索输出,则 HDFS 可能存在问题。
此错误的最常见原因是上一个任务仍在处理中。如果在 reduce 任务第一次尝试运行时发生错误,这种情况尤其可能发生。您可以通过查看返回错误的集群步骤的 syslog 日志来检查是否是这种情况。如果 syslog 显示 map 和 reduce 任务都在进行中,这表明 reduce 阶段已经开始,而还有尚未完成的 map 任务。
要在日志中查找的一件事是地图进度百分比达到 100%,然后又回落到较低的值。当地图百分比为 100% 时,这并不意味着所有地图任务都已完成。它只是意味着 Hadoop 正在执行所有映射任务。如果此值回落到 100% 以下,则意味着映射任务失败,根据配置,Hadoop 可能会尝试重新调度任务。如果日志中的地图百分比保持在 100%,请查看 CloudWatch 指标,特别是 RunningMapTasks,以检查地图任务是否仍在处理中。您还可以使用主节点上的 Hadoop Web 界面找到此信息。
如果您遇到此问题,可以尝试以下几种方法:
指示 reduce 阶段在开始之前等待更长的时间。您可以通过将 Hadoop 配置设置 mapred.reduce.slowstart.completed.maps 更改为更长的时间来做到这一点。有关详细信息,请参阅创建引导操作以安装其他软件。
将reducer 计数与集群的总reducer 能力相匹配。为此,您可以调整作业的 Hadoop 配置设置 mapred.reduce.tasks。
使用组合器类代码来最小化需要获取的输出数量。
检查 Amazon EC2 服务是否存在影响集群网络性能的问题。您可以使用服务运行状况仪表板执行此操作。
查看集群中实例的 CPU 和内存资源,以确保您的数据处理不会占用节点资源。有关详细信息,请参阅配置集群硬件和网络。
检查您的 Amazon EMR 集群中使用的 Amazon 系统映像 (AMI) 的版本。如果版本是 2.3.0 到 2.4.4(含),请更新到更高版本。指定范围内的 AMI 版本使用可能无法从映射阶段传递输出的 Jetty 版本。当 reducer 无法从 map 阶段获取输出时,会发生 fetch 错误。
Jetty 是一个开源 HTTP 服务器,用于 Hadoop 集群内的机器对机器通信