Spark 任务从 running 状态切换回 accepted

671 阅读1分钟

背景

遇到过几次,spark cluster 模式下,任务从 running 状态切换回 accept,最后报错目录已存在。 当然,在执行spark 任务之前,已经在脚本中确认过目录不存在。

Spark 的状态分为:

image.png

NEW

client 向Resource Manager 发出请求,并生成一个JOB ID,此时为 New。

NEW_SAVING & SUBMIT

RM 接收 client 的请求,状态改为 NEW_SAVING。 RM 保存 Job 信息,状态为 SUBMIT

ACCEPTED

RM 将信息传给 Scheduler,Scheduler 会检查权限和 AM 资源是否足够。如果 Scheduler 接受了请求,应用状态为 ACCEPTED。

RUNNING

Scheduler 调度此应用开始运行,RM brokers 分配资源给 AM 容器,然后启动。这时应用为 RUNNING。

检查

之后,AM 与RM 协商容器资源,并定时检查状态

FINISHED or FAILED

如果按机会完成,则状态为 FINISHED,否则,FAILED。

Step 1 == NEW, NEW_SAVING, SUBMITTED Step 2 == ACCEPTED Steps 3,4,5,6 == RUNNING Steps 7 and 8 can be any of the end states of the application.

image.png

结论

当 running时,说明应用已经开始运行。切回 accepted 说明在运行时报错。 而报错信息是:“dir already exist”, 并不是真正的问题。后来排查有两种情况:

  • 因为数据延迟等问题,导致上游目录不存在;
  • 数据有问题,类型不匹配

引用

blog.cloudera.com/apache-hado…