Azkaban

Azkaban 工作流调度器

不打扰是莪最后的温柔 提交于 2019-12-04 07:32:52
1、Azkaban是什么 我们在工作中应该都遇到过这样的场景:有一个任务,这个任务可以划分成多个较小的任务完成,之所以进行划分是因为小任务之间可以并发的进行,例如是一个shell脚本执行的命令吧,大任务A可以划分成B、C、D、E四个子任务(脚本)完成,而B和C是可以同时进行的,D依赖B和C的输出,E又依赖D的输出,于是我们一般的做法可能就是开两个终端同时执行B和C,等两个都执行完成之后再执行D,接着在执行E。整个执行的过程都需要我们参与,但是整个的执行过程类似一个有向无环图,每一个子任务的执行可以看作整个任务的一个流,我们可以同时从没有入度的节点开始执行,任何没有流向(两个节点之间没有通路)关系节点都可以并行得执行,人为的控制难免就有点力不从心了(因为很多任务都需要在深夜执行,一般我们都是写脚本并设置cron),这时候我们需要的就是一个工作流调度器。 Azkaban就是完成这种任务的(其实主要还是用于对hadoop生态圈的任务的支持),它是由Linkedin实现并开源的,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流。 Azkaban有如下功能特点: Web用户界面 方便上传工作流 方便设置任务之间的关系 调度工作流 认证

Azkaban的Web Server源码探究系列23: 一次性执行execute的正式提交

丶灬走出姿态 提交于 2019-12-04 07:32:42
下面正式提交 String message = executorManager .submitExecutableFlow( exflow , user .getUserId()); 那么,到底 executorManager是如何处理的呢? ================================================================================= stop in azkaban.executor.ExecutorManager.submitExecutableFlow ================================================================================= 其实主要就是在数据库中插入一行记录,具体看 runner .update( connection , INSERT_EXECUTABLE_FLOW , flow .getProjectId(), flow .getFlowId(), flow .getVersion(), Status. PREPARING .getNumVal(), submitTime , flow .getSubmitUser(), submitTime ); connection .commit(); 这个很好理解吧 ===

Azkaban的Web Server源码探究系列17:Creating Flows

一世执手 提交于 2019-12-04 07:32:33
到目前为止,一切还比较顺利!工程Project已经创建完毕,下面来尝试创建一个flow. === 什么是 flow? A job is a process you want to run in Azkaban. Jobs can be set up to be dependent on other jobs. The graph created by a set of jobs and their dependencies are what make up a flow. 根据官方的说明: 一个job是一个进程,job之间可以互相依赖,指定顺序。 一系列的job和依赖关系构成的图,就是一个flow. ===================================下面根据官方的例子来写一个初级的flow. 1)新建2个job文件 其中内容分别为: 可以看到bar.job依赖了foo.job. PS:高级篇还可以玩 Embedded Flows ============================================================= 2)打包成zip文件 用winrar就可以了 打开是上面这样滴! =============================== 3)上传upload 点击上传的页面为: 然后上传的URL为: 看来post

Azkaban的Web Server源码探究系列21: Flow执行前的准备工作

巧了我就是萌 提交于 2019-12-04 07:32:21
之前说到的上传flow,到最后都转化为数据库里的若干记录,当然是多个表的数据一起来全方位阐述这个你上传的flow. 那么,flow到底如何执行呢? 今天就开始研究flow的执行过程! =================================================================== GET /manager?project=xxx&ajax=fetchflowgraph&flow=xxx stop in azkaban.webapp.servlet.ProjectManagerServlet.doGet run ==================================================================== GET /executor?project= xxx&ajax=flowInfo&flow=xxx stop in azkaban.webapp.servlet.ExecutorServlet.doGet run ==================================================================== 来源: oschina 链接: https://my.oschina.net/u/1382024/blog/656020

Azkaban的Web Server源码探究系列18:上传flow涉及的过程分析

谁说胖子不能爱 提交于 2019-12-03 05:08:49
上节涉及到上传flow,图为 对应的servlet是: root .addServlet( new ServletHolder( new ProjectManagerServlet()), "/manager" ); stop in azkaban.webapp.servlet.ProjectManagerServlet.doPost 下面来debug这个过程! ================================================================================ 首先是request的文件提取,代码为: @SuppressWarnings ( "unchecked" ) public Map<String, Object> parseMultipart(HttpServletRequest request ) throws IOException, ServletException { // org.apache.commons.fileupload.servlet.ServletFileUpload ServletFileUpload upload = new ServletFileUpload( _uploadItemFactory ); List<FileItem> items = null ; try { /

Hadoop生态圈-Azkaban部署实战

匿名 (未验证) 提交于 2019-12-03 00:34:01
                    Hadoop生态圈-Azkaban部署实战                                       作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。        һ. Azkaban的优势 二.Azkaban的搭建过程 1>.上传azkaban程序并创建解压目录 [yinzhengjie@s101 data]$ pwd /home/yinzhengjie/ data [yinzhengjie@s101 data]$ ll total 401716 -rw-r--r-- 1 yinzhengjie yinzhengjie 16664491 Apr 16 15 : 37 azkaban-exec-server- 3.46 . 0 . tar .gz -rw-r--r-- 1 yinzhengjie yinzhengjie 24333 Apr 16 15 : 18 azkaban-hadoop-security-plugin- 3.46 . 0 . tar .gz -rw-r--r-- 1 yinzhengjie yinzhengjie 349929173 Apr 16 15 : 11 azkaban-plugins-master. zip -rw-r--r-- 1 yinzhengjie

Azkaban 简介

匿名 (未验证) 提交于 2019-12-02 23:57:01
一个完整的大数据分析系统,必然由很多任务单元 (如数据收集、数据清洗、数据存储、数据分析等) 组成,所有的任务单元及其之间的依赖关系组成了复杂的工作流。复杂的工作流管理涉及到很多问题: 如何定时调度某个任务? 如何在某个任务执行完成后再去执行另一个任务? 如何在任务失败时候发出预警? ...... 面对这些问题,工作流调度系统应运而生。Azkaban 就是其中之一。 Azkaban 产生于 LinkedIn,并经过多年生产环境的检验,它具备以下功能: 兼容任何版本的 Hadoop 易于使用的 Web UI 可以使用简单的 Web 页面进行工作流上传 支持按项目进行独立管理 定时任务调度 模块化和可插入 身份验证和授权 跟踪用户操作 支持失败和成功的电子邮件提醒 SLA 警报和自动查杀失败任务 重试失败的任务 Azkaban 的设计理念是在保证功能实现的基础上兼顾易用性,其页面风格清晰明朗,下面是其 WEB UI 界面: Azkaban 和 Oozie 都是目前使用最为广泛的工作流调度程序,其主要区别如下: 两者均可以调度 Linux 命令、MapReduce、Spark、Pig、Java、Hive 等工作流任务; 两者均可以定时执行工作流任务。 Azkaban 使用 Properties(Flow 1.0) 和 YAML(Flow 2.0) 文件定义工作流; Oozie 使用

Azkaban 3.x 编译及部署

匿名 (未验证) 提交于 2019-12-02 23:57:01
Azkaban 在 3.0 版本之后就不提供对应的安装包,需要自己下载源码进行编译。 下载所需版本的源码,Azkaban 的源码托管在 GitHub 上,地址为 https://github.com/azkaban/azkaban 。可以使用 git clone 的方式获取源码,也可以使用 wget 直接下载对应 release 版本的 tar.gz 文件,这里我采用第二种方式: # 下载 wget https://github.com/azkaban/azkaban/archive/3.70.0.tar.gz # 解压 tar -zxvf azkaban-3.70.0.tar.gz 1. JDK Azkaban 编译依赖 JDK 1.8+ ,JDK 安装方式见本仓库: 2. Gradle Azkaban 3.70.0 编译需要依赖 gradle-4.6-all.zip 。Gradle 是一个项目自动化构建开源工具,类似于 Maven,但由于采用 Groovy 语言进行项目配置,所以比 Maven 更为灵活,目前广泛用于 Android 开发、Spring 项目的构建。 需要注意的是不同版本的 Azkaban 依赖 Gradle 版本不同,可以在解压后的 /gradle/wrapper/gradle-wrapper.properties 文件查看

Azakaban

匿名 (未验证) 提交于 2019-12-02 23:52:01
Azkaban 一 1.1 为什么需要工作流调度系统 1)一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序、hive脚本等 2)各任务单元之间存在时间先后及前后依赖关系 3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行; 20G原始数据,我们每天都要对其进行处理,处理步骤如下所示: Hadoop先将原始数据上传到HDFS上(HDFS的操作); MapReduce对原始数据进行清洗(MapReduce的操作); hive表中(hive的导入操作); Hive中多个表的数据进行JOIN处理,得到一张hive的明细表(创建中间表); hive的查询操作); 1.2 2)任务依赖(1)任务的结果,(3)任务依赖(2)任务的结果,(4)任务依赖(3)任务的结果,(5)任务依赖(4)任务的结果。一般的做法是,先执行完(1)再执行(2),再一次执行(3)(4)(5)。 crontab执行。其实,整个过程类似于一个有向无环图(DAG)。每个子任务相当于大任务中的一个节点,也就是,我们需要的就是一个工作流的调度器,而Azkaban就是能解决上述问题的一个调度器。 1.3 什么是azkaban Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程

Azkaban的安装部署

匿名 (未验证) 提交于 2019-12-02 23:36:01
一、安装需要的jar包 // 将Azkaban Web服务器 azkaban - web - server - 2.5 .0 . tar . gz // Azkaban执行服务器 azkaban - executor - server - 2.5 .0 . tar . gz // sql脚本 azkaban - sql - script - 2.5 .0 . tar . gz 二、安装azkaban 在/usr/local目录下创建azkaban目录 mkdir azkaban 解压所需的jar包到/usr/local/azkaban目录下 tar - zxvf azkaban - web - server - 2.5 .0 . tar . gz - C / usr / local / azkaban tar - zxvf azkaban - executor - server - 2.5 .0 . tar . gz - C / usr / local / azkaban tar - zxvf azkaban - sql - script - 2.5 .0 . tar . gz - C / usr / local / azkaban 对解压后的文件重新命名 mv azkaban - web - 2.5 .0 / server mv azkaban - executor - 2.5