Azkaban的Exec Server分析 27:Execute Server接收任务的过程分析

若如初见. 提交于 2019-12-05 07:43:47

之前,我们说过,web server分发任务,是通过如下的URL来的

uri = "http://x.x.x.x:port/executor?action=execute&execid=12&user"

// 构造URI

URI uri = ExecutorApiClient.buildUri(hostportpathtrueparamList.toArray(new Pair[0])); 

return apiclient.httpGet(urinull);

也就是说,web server发出这样的GET请求给execute server,那么下面就来分析execute server是如何处理这个连接的!

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

root.addServlet(new ServletHolder(new ExecutorServlet()), "/executor");

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

jdb azkaban.execapp.AzkabanExecutorServer  -conf  /root/azkb/azkaban_3.0.0_debug/conf

stop in azkaban.execapp.ExecutorServlet.init

stop in azkaban.execapp.ExecutorServlet.doGet

stop in azkaban.execapp.FlowRunnerManager.submitFlow

run

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

private void handleAjaxExecute(HttpServletRequest req, Map<String, Object> respMap, int execId)

throws ServletException {

// 看到这里了

try {

// 交给本地的manager来处理

flowRunnerManager.submitFlow(execId);

} catch (ExecutorManagerException e) {

e.printStackTrace();

logger.error(e);

respMap.put(RESPONSE_ERROR, e.getMessage());

}

}


先从数据库中执行如下语句:

private static String FETCH_EXECUTABLE_FLOW = "SELECT exec_id, enc_type, flow_data FROM execution_flows "

+ "WHERE exec_id=?";

查处flowData后,-》取出projectId,+Version.

然后以此去查ProjectVersions得到数据

再去project_files拿下数据。

其实你知道是拿下了你上传的压缩包就行了,然后解压缩到本地的projects文件夹中!

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

这期间会创建一个软连接

ln -s /root/azkb/azkaban_3.0.0_debug/projects/9.15/* .;

实际效果如下:

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

Future<?> future = executorService.submit(runner);

 

提交任务入执行线程池!


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!