什么时候Spark作业会因FetchFailedException而失败?

时间:2015-12-03 20:21:34

标签: apache-spark hive

我有一个要求,我需要连接几个hive表并获取该查询产生的最终数据,然后将该数据写入文件。

我能够达到这个要求,但是当系统中运行了很多作业时,我发现其中一个具有上述用例的作业失败了,我试图进一步调试以找到这个的实际根本原因失败,但我无法成功。

有人可以帮我解决这个问题。这里我附上了这份工作执行的完整日志。 Complete Log file of my Spark Job

1 个答案:

答案 0 :(得分:1)

当执行程序由于某些未处理的异常而意外丢失时可能会发生MetadataFetchFailedException,如果它是间歇性的而不是所有执行程序都丢失,则通常与内存相关,但如果由于格式错误的单个数据记录而发生其他未处理的错误等等。

日志文件中的以下行确认丢失的执行程序:

15/12/03 18:55:30 ERROR cluster.YarnScheduler: Lost executor 7 on my_cluster_ip3: remote Akka client disassociated
15/12/03 18:55:30 WARN remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkExecutor@my_cluster_ip3:54584] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].
15/12/03 18:55:30 INFO scheduler.TaskSetManager: Re-queueing tasks for 7 from TaskSet 4.9
15/12/03 18:55:30 WARN scheduler.TaskSetManager: Lost task 4.0 in stage 4.9 (TID 3106, my_cluster_ip3): ExecutorLostFailure (executor 7 lost)
15/12/03 18:55:30 WARN scheduler.TaskSetManager: Lost task 7.0 in stage 4.9 (TID 3109, my_cluster_ip3): ExecutorLostFailure (executor 7 lost)
15/12/03 18:55:30 WARN scheduler.TaskSetManager: Lost task 1.0 in stage 4.9 (TID 3103, my_cluster_ip3): ExecutorLostFailure (executor 7 lost)

由于您在YARN上运行,因此在使用YARN时,与OOM相关的丢失执行程序的一个常见原因是YARN强制执行其容器内存限制,但对于Spark,您需要猜测执行程序内存开销是否适合容器作为最多使用spark.executor.memory字节内存的任务。

你可能正在使用384的默认spark.yarn.executor.memoryOverhead。看起来你的容器最多只有24GB,所以我建议启动spark.executor.memory和/或spark.yarn.executor.memoryOverhead有点看,看它是否有帮助。您可以尝试尽可能高地将其调高,看看是否先修复它,然后调整到您实际需要的内容(可能需要报告指标/统计数据的指导),以避免搁置内核。