Azkaban

  Azkaban的Web Server源码探究系列25: 一次性执行execute任务实际分发过程

懵懂的女人 提交于 2019-12-06 03:42:48
下面就讲解如何把一个任务真正的分发到指定的executor上!!! ================================================================= 上节讲到了在函数azkaban.executor.ExecutorManager.callExecutorServer中有这么一行 Map<String, Object> jsonResponse = callExecutorForJsonObject( host , port , "/executor" , paramList ); 进入这个函数一探究竟! --- // 构造http client ExecutorApiClient apiclient = ExecutorApiClient. getInstance (); @SuppressWarnings ( "unchecked" ) // 构造URI URI uri = ExecutorApiClient. buildUri ( host , port , path , true , paramList .toArray( new Pair[0])); return apiclient .httpGet( uri , null ); --- 具体产生的URL类似于: uri = "http://x.x.x.x:port

Azkaban的Web Server源码探究系列12: 首页之前的跳转

[亡魂溺海] 提交于 2019-12-06 03:42:33
上节说到,登陆成功后,会发起新的请求GET / 这个时候又进入 azkaban . webapp . servlet . IndexRedirectServlet .doGet 只不过,这次是登陆成功的,cookie里有的sessionid. 看这个请求的结果 ================================================= 这个其实最终执行了 @Override protected void handleGet(HttpServletRequest req , HttpServletResponse resp , Session session ) throws ServletException, IOException { resp .sendRedirect( defaultServletPath ); } 不多说了! 来源: oschina 链接: https://my.oschina.net/u/1382024/blog/655489

Azkaban的Web Server源码探究系列14:创建Project

馋奶兔 提交于 2019-12-06 03:42:22
创建的图为: 通过抓包,可以分析出 路径为: POST /manager HTTP/1.1 所以,需要分析 root .addServlet( new ServletHolder( new ProjectManagerServlet()), "/manager" ); 分析 ProjectManagerServlet ================================================================================= 1)init @Override public void init(ServletConfig config ) throws ServletException { super .init( config ); AzkabanWebServer server = (AzkabanWebServer) getApplication(); projectManager = server .getProjectManager(); executorManager = server .getExecutorManager(); scheduleManager = server .getScheduleManager(); userManager = server .getUserManager();

Azkaban的Web Server源码探究系列13:首页/index的内容获取

旧城冷巷雨未停 提交于 2019-12-06 03:42:09
上节,讲到了跳转到/index ServletHolder index = new ServletHolder( new ProjectServlet()); root .addServlet( index , "/index" ); 所以需要调研ProjectServlet的方法 ===================================================================== 1)init 略 2)doGet @Override protected void handleGet(HttpServletRequest req , HttpServletResponse resp , Session session ) throws ServletException, IOException { //这里,不执行 if ( hasParam ( req , "doaction" )) { if (getParam( req , "doaction" ).equals( "search" )) { String searchTerm = getParam( req , "searchterm" ); if (! searchTerm .equals( "" ) && ! searchTerm .equals( ".*" )) {

Azkaban Two Server模式部署

十年热恋 提交于 2019-12-06 03:40:21
Azkaban Two Server模式部署 Two Server模式就是把Azkaban和MySQL进行了分离,下面就介绍一下这种部署模式。 1、准备工作 1.结点规划 node1:azkaban-web、azkaban-exec node2:MySQL 这里本人将azkaban的相关服务放置到一台服务器中,将MySQL放置到另外一台服务器中。 2.服务器准备 两台服务器,服务器系统这里选择的是CentOS7。一台称之为node1、另外一台称之为node2。 主机名称修改:根据自己的需求修改。 添加主机名解析: 免密登录:为了避免麻烦的操作,这里本人配置了免密登录。主机中如果安装了hadoop等大数据相关的软件,那么肯定已经配置过了。 两台服务器都安装jdk,jdk版本1.8以上。 编译源码,参见: Azkaban源码编译 ,此处使用的是Azkaban-3.66.0版本。 node2中安装MySQL,此处忽略安装MySQL的过程。详情参见: Linux中安装MySQL 2、MySQL相关操作 1.拷贝建表文件 在node2上创建一个放置建表文件的目录: mkdir –p /home/script/azkabansql 到编译的目录中,将编译好的文件远程拷贝到目标主机: cd /opt/azkaban/azkaban/azkaban-db/build/distributions/

Workflow orchestration for Google Dataflow

99封情书 提交于 2019-12-05 17:38:25
We are using Google Dataflow for batch data processing and looking for some options for workflow orchestration tools something similar to what Azkaban does for Hadoop. Key things things that we are looking for are, Configuring workflows Scheduling workflows Monitoring and alerting failed workflows Ability to rerun failed jobs We have evaluated Pentaho, but these features are available in their Enterprise edition which is expensive. We are currently evaluating Azkaban as it supports javaprocess job types. But Azkaban is primarily created for Hadoop jobs so it has more deep integration with

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 ( host , port , path , true , paramList .toArray( new Pair[0])); return apiclient .httpGet( uri , null ); 也就是说,web server发出这样的GET请求给execute server,那么下面就来分析execute server是如何处理这个连接的! ======================================================================================== root .addServlet( new ServletHolder( new ExecutorServlet()), "/executor" ); ======================================================================================== jdb azkaban

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

血红的双手。 提交于 2019-12-05 07:43:35
提交之后,很不幸,有个问题如下: 抓包分析: 请求和响应分别如下: 所以接下来需要对这个URL进行debug ============================================================================== GET /executor?execid=6&ajax=fetchexecflow stop in azkaban.webapp.servlet.ExecutorServlet.doGet stop in azkaban.webapp.servlet.ExecutorServlet.ajaxFetchExecutableFlow run ============================================================================== 经过研究,发现这样的行为 看来是需要跟踪QueueProcessorThread了。 stop in azkaban.executor.ExecutorManager$QueueProcessorThread.run stop in azkaban.executor.ExecutorManager$QueueProcessorThread.handle 这个线程执行的是 selectExecutorAndDispatchFlow

Azkaban的Web Server源码探究系列10 : /对应的servlet解析

℡╲_俬逩灬. 提交于 2019-12-05 07:43:24
如果请求的URI是"/",对应的servlet如何响应? =================================================================== ServletHolder indexRedirect = new ServletHolder( new IndexRedirectServlet( defaultServletPath )); root .addServlet( indexRedirect , "/" ); =================================================================== 所以需要分析 IndexRedirectServlet 1)servlet的init方法 这里涉及到了3个类,分别是: IndexRedirectServlet LoginAbstractAzkabanServlet AbstractAzkabanServlet 首先找这3个类的init方法---第一个init方法在 LoginAbstractAzkabanServlet 所以需要从这个类的init方法开始看 AbstractAzkabanServlet.init @Override public void init(ServletConfig config ) throws