Azkaban的Web Server源码探究系列24: 一次性执行execute任务取出处理

本文探讨了Azkaban中任务如何被分配到指定的executor上,并深入分析了执行流程中的关键步骤,包括请求和响应的抓包分析、QueueProcessorThread的跟踪以及选择executor的具体逻辑。

提交之后,很不幸,有个问题如下:

144613_oQRu_1382024.png

抓包分析:

请求和响应分别如下:

145730_8ljk_1382024.png

145743_hcpX_1382024.png

所以接下来需要对这个URL进行debug

==============================================================================

GET /executor?execid=6&ajax=fetchexecflow

stop in azkaban.webapp.servlet.ExecutorServlet.doGet

stop in  azkaban.webapp.servlet.ExecutorServlet.ajaxFetchExecutableFlow

run

==============================================================================

经过研究,发现这样的行为

163643_KAGE_1382024.png

看来是需要跟踪QueueProcessorThread了。


stop  in  azkaban.executor.ExecutorManager$QueueProcessorThread.run

stop in azkaban.executor.ExecutorManager$QueueProcessorThread.handle


这个线程执行的是

selectExecutorAndDispatchFlow(reference, exflow, new HashSet<Executor>(activeExecutors));

往下就是:

Executor selectedExecutor = selectExecutor(exflow, availableExecutors);

//用户如果指定了executor,就导向对应的executor

Executor choosenExecutor = getUserSpecifiedExecutor(exflow.getExecutionOptions(), exflow.getExecutionId());

// 

// If no executor was specified by admin

if (choosenExecutor == null) {//否则的话

ExecutorSelector selector = new ExecutorSelector(filterList, comparatorWeightsMap);

choosenExecutor = selector.getBest(availableExecutors, exflow);

}

return choosenExecutor;

那么,到底是如何选出来的呢?

如果没有指定comparator的话,就是基于executor自身的hashcode来算的,蛋疼!

===========================================================================================================

好,下一个问题就是任务如何发到指定的executor上呢?

欲知后事,且听下回分解!




转载于:https://my.oschina.net/qiangzigege/blog/656167

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值