解决 Azkaban Executor 启动后不会自动激活问题

使用Azkaban调度任务时候总是出错

2019/05/21 12:11:03.158 +0800 ERROR [ExecutorManager] [Azkaban] Rolling back executor assignment for execution id:5
azkaban.executor.ExecutorManagerException: java.io.IOException: executor became inactive before setting up the flow 5
	at azkaban.executor.ExecutorApiGateway.callWithExecutionId(ExecutorApiGateway.java:80)
	at azkaban.executor.ExecutorApiGateway.callWithExecutable(ExecutorApiGateway.java:43)
	at azkaban.executor.ExecutorManager.dispatch(ExecutorManager.java:1051)
	at azkaban.executor.ExecutorManager.access$600(ExecutorManager.java:65)
	at azkaban.executor.ExecutorManager$QueueProcessorThread.selectExecutorAndDispatchFlow(ExecutorManager.java:1282)
	at azkaban.executor.ExecutorManager$QueueProcessorThread.processQueuedFlows(ExecutorManager.java:1254)
	at azkaban.executor.ExecutorManager$QueueProcessorThread.run(ExecutorManager.java:1192)
Caused by: java.io.IOException: executor became inactive before setting up the flow 5
	at azkaban.executor.ExecutorApiGateway.callForJsonObjectMap(ExecutorApiGateway.java:108)
	at azkaban.executor.ExecutorApiGateway.callWithExecutionId(ExecutorApiGateway.java:78)
	... 6 more
2019/05/21 12:11:03.163 +0800 WARN [ExecutorManager] [Azkaban] Executor otest01:12321 (id: 5), active=true responded with exception for exec: 5
azkaban.executor.ExecutorManagerException: azkaban.executor.ExecutorManagerException: java.io.IOException: executor became inactive before setting up the flow 5
	at azkaban.executor.ExecutorManager.dispatch(ExecutorManager.java:1057)
	at azkaban.executor.ExecutorManager.access$600(ExecutorManager.java:65)
	at azkaban.executor.ExecutorManager$QueueProcessorThread.selectExecutorAndDispatchFlow(ExecutorManager.java:1282)
	at azkaban.executor.ExecutorManager$QueueProcessorThread.processQueuedFlows(ExecutorManager.java:1254)
	at azkaban.executor.ExecutorManager$QueueProcessorThread.run(ExecutorManager.java:1192)
Caused by: azkaban.executor.ExecutorManagerException: java.io.IOException: executor became inactive before setting up the flow 5
	at azkaban.executor.ExecutorApiGateway.callWithExecutionId(ExecutorApiGateway.java:80)
	at azkaban.executor.ExecutorApiGateway.callWithExecutable(ExecutorApiGateway.java:43)
	at azkaban.executor.ExecutorManager.dispatch(ExecutorManager.java:1051)
	... 4 more
Caused by: java.io.IOException: executor became inactive before setting up the flow 5
	at azkaban.executor.ExecutorApiGateway.callForJsonObjectMap(ExecutorApiGateway.java:108)
	at azkaban.executor.ExecutorApiGateway.callWithExecutionId(ExecutorApiGateway.java:78)
	... 6 more

各种方法都使用了但是也没有用,最后发现一篇大神写的博客后就解决了:

通过翻看 Azkaban Executor Server 源码,发现 Executor 提供了 rest 接口,来手动激活 Executor.
为什么不在 Executor 启动时自动激活呢….官方 issue110 解释如下:

We don't update prior to web-server start.

Let me introduce how we do a regular Executor deployment. Both old webserver and old executor(3.a) are up initially, and old executor is running jobs (we can not interrupt it). Executor Deployment starts:

install new Executor (3.b) on our box without activating.
Run job tests, which targets 3.b and make sure 3.b is working.
Activate 3.b, and deactivate 3.a. Even though 3.a is deactivated, jobs still keep runnig there.
Deployment completes.
We would better run tests against new executor before activating it. Is it a bit clear now?

解决办法(手动激活 Executor):
curl http://${executorHost}:${executorPort}/executor?action=activate

参考:
https://github.com/azkaban/azkaban/issues/1100
https://github.com/azkaban/azkaban/issues/1581

博主原文链接

你可能感兴趣的:(Azkaban)