分享azkaban的重启步骤,以及重启之后任务无法正常执行的问题解决。
文章是流水账,记录了处理问题的心路历程,不要嫌弃耐心观看呦,也可以直接划到结尾,看总结~
事情经过:
项目一直用azkaban来调度任务。前段时间,服务器异常终止,运维小哥哥教我直接调用sh start-exec.sh脚本启动,解决。
这次,azkaban的一个任务一直preparing,于是就kill掉这个任务,然后发现一直kill不掉。我就去度娘,发现一直preparing可能是内存问题,或者executors问题。详见https://blog.csdn.net/qq_43771096/article/details/106042574
看文章,发现原来azkaban的信息都是有mysql保存的,就打算去操作mysql,让任务直接killed。找到了对应的id,修改了几个表,发现azkaban的页面只有部分页面是修改成功的,还有部分页面无法修改,并且,点击重跑也是无法进行的。看页面发现还是静态页面。
于是想到,没有什么是一个重启解决不了的,然后还原数据库,重启azkaban。直接一个sh shutdown-exec.sh,再sh start-exec.sh。接下来事情就开始糟糕了。那个preparing的任务是显示正常了,但是所有任务都无法启动。一看,发现数据库的executors都是没有激活的,active=0。于是 手动激活 Executor:curl http://${executorHost}:${executorPort}/executor?action=activate
executors现在是激活的了,但是任务还是执行不了,没有任何日志,直接failed。看azkaban的数据库,发现所有的任务记录executor值的字段都为null。然后azkaban的日志显示 This executor wasn't found in the DB.Setting active = false 为什么说executor没有找到,前面看mysql的时候,明明有对应的executors数据呀!
提出问题:
为什么executor的自增id变了?难不成 shutdown-exec.sh的时候,会去数据库删除之前的executor信息,然后start-exec.sh的时候又会加一个新的去!
为什么新运行的任务executor值都为null?难不成前端的静态页面会存一个executor值,如果重启后端,不起前端,这个executor就找不到,所以分配不到executor,直接为null!
解决:
有了思路就好办了,我们先shutdown-exec.sh,然后查看mysql,发现executors表数据果然空了!我们手动加一个之前的executor id 数据进去,然后start-exec.sh。果然,任务可以正常运行了,nice~
总结:
经过这么胆战心惊的一顿操作,了解了azkaban的几个知识点:
- 正确重启azkaban的流程应该是:shutdown-exec.sh --> start-exec.sh --> 手动激活executors --> 启动azkaban的前端服务
- azkaban是不会自动激活executors的,必须要手动操作,官方解释和操作方法详见 https://blog.csdn.net/lc0817/article/details/78891150
- azkanban的前端记录了一个executor id,如果同步重启前端,就会导致无法找到原来的executor信息,任务无法分配executor执行
今天的流水账就这么多,祝大家码艺精进~