我们一直在获取ExecutorLostExceptions,但无法确定根本原因。
这是一个可以创建错误的简化脚本
filenames = "hdfs://myfile1,hdfs://myfile2"
sc.textFile(filenames).first()
作为一项实验,当我故意在仅1mb spark.executor.memory
的1GB数据上运行spark作业时,驱动程序会输出以下错误消息
16/04/28 17:28:54 INFO TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0,
host.addr, partition 0,ANY, 2257 bytes)
16/04/28 17:29:28 INFO MesosSchedulerBackend: Executor lost: 4e199be7-a0bc-407d-ba70-4147e08d6c39-S5, marking slave 4e199be7-a0bc-407d-ba70-4147e08d6c39-S5 as lost
16/04/28 17:29:28 INFO MesosSchedulerBackend: Mesos slave lost: 4e199be7-a0bc-407d-ba70-4147e08d6c39-S5
16/04/28 17:29:28 ERROR TaskSchedulerImpl: Lost executor 4e199be7-a0bc-407d-ba70-4147e08d6c39-S5 on host.addr: Unknown executor exit code (256) (died from signal 128?)
16/04/28 17:29:28 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, host.addr): ExecutorLostFailure (executor 4e199be7-a0bc-407d-ba70-4147e08d6c39-S5 exited caused by one of the running tasks) Reason: Unknown executor exit code (256) (died from signal 128?)
并在几次自动重试后,整个作业失败。这种情况发生在Pyspark和Scala-spark。
我可以查看哪些适当的日志来确定此执行程序失败的确切原因?
对于这种受控案例,我知道内存耗尽是原因。然而,这些和其他具有不同退出代码的故障会定期发生,然后我就不知道在哪里寻找或修复什么。
到目前为止我看过的地方包括
/tmp/mesos/slaves/[slaveid]/frameworks/[frameworkid]/executors/[executorid]/runs/latest/{stderr,stdout}
在执行者为"丢失" /var/logs/mesos/mesos-slaves.{INFO,WARN,ERROR,FATAL}
/tmp/spark-events/[executorid]
这些地方有助于解决一些问题,但不是OOM错误,现在我不确定在哪里看。