热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Azkaban3.59.x最新版

1.Azkaban概述Azkaban技术产生前景:在大数据分析场景中,以ETL(Extract抽取-Transform交互转换-Load加载)为例,数据的操作包含了如下流程:RDBMS>Sqoop>Hadoop>Sqoop>RDBMSNoSQL,这里涉及了三个流程:数据抽取>数据清洗>数据入库。
编辑推荐:
本文来自于CSDN,本文主要介绍了Azkaban运行模式,组件构成以及Azkaban的配置等相关内容。

1. Azkaban概述

Azkaban技术产生前景:

在大数据分析场景中,以ETL( Extract抽取 -Transform交互转换 -Load加载 )为例 ,数据的操作包含了如下流程:RDBMS ==>Sqoop ==>Hadoop ==>Sqoop ==>RDBMS/NoSQL/...,这里涉及了三个流程:数据抽取 ==> 数据清洗 ==> 数据入库。

这三个步骤出现了明显的顺序问题。假设数据抽取需要3h,数据清洗需要2h,数据入库需要1h。我们可以使用linux shell提供的crontab 来实现。他的优点是使用简单,缺点却有很多:

1. 流程不便于跟踪和监控(流程某个环境出错没办法监控)。

2. 在这个流程中有些模块执行的时间可能出现延迟/提前。比如数据清洗预测需要2h,结果用了3h,此刻数据入库在前一个任务还没执行完就已经开始执行了;比如清洗预测需要2h,结果用了1h,导致后面的流程出现无效等待的状态。

因此,像Azkaban这样的调度框架在我们数据平台中就扮演着很重要的角色。

大数据中常见的调度框架

大数据中常见的调度框架,最常见的就是crontab。除此之外还有很多集成框架:

Quartz:Quartz是OpenSymphony[pn smfni] 开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。

Azkaban:Azkaban是由Linkedin公司推出的一个批量工作流任务调度器, 其使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流 。

Oozie:Oozie是一个工作流引擎服务器,用于运行hadoop map/reduce和hive等任务工作流。同时Oozie还是一个java web程序,运行在java servlet容器中,如tomcat中。Oozie以action为基本单位,可以将多个action构成一个DAG图的模式运行。Oozie工作流通过HPDL(一种通过XML自定义处理的语言)来构造Oozie工作流。

Zeus:宙斯是阿里巴巴开源的一款分布式Hadoop作业调度平台,实现任务的分布式调度,支持多机器的水平扩展。

Azkaban概述

Azkaban是一个由LinkedIn 创建的用来跑Hadoop 任务的批量的工作流执行器;其解决了job依赖顺序的问题,并提供了一个简单易用的用户界面检测我们的工作流。

Azkaban特性如下:

兼容所有Hadoop版本

简单易用的web操作界面和web工作流资源提交机制

在Azkaban中每个项目相互独立互不影响。

良好的工作流执行封装(执行任务流无需太复杂的操作 一个按钮搞定)。

模块化和插件化:执行的具体任务不会与Azkaban相互耦合,代码侵入性低。

认证与授权:良好的权限管理机制

跟踪用户的行为:方便出现问题后知道是哪个用户的错误导致的。

任务成功/失败后的 邮件通知机制

任务错误的重试机制

Azkaban3.x 以后不提供直接的安装包下载,其安装包需通过Gradle脚本来编译, 并且要求最低的 Java 版本是8. 如下是Azkaban的学习网站:

Azkaban的官网: https://azkaban.github.io

Azkaban的框架源码: https://github.com/azkaban/azkaban

Azkaban文档: https://github.com/azkaban/azkaban.github.io

#2. Azkaban架构简析

Azkaban由三个关键组件构成(如下图):

MySQL关系型数据库:Azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。

AzkabanExecutorServer:早期版本的Azkaban在单个服务中具有AzkabanWebServer和AzkabanExecutorServer功能,目前Azkaban已将AzkabanExecutorServer分离成独立的服务器。其好处是某个任务流失败后,可以更方便的将其重新执行,便于Azkaban升级。

Azkaban3.59.x 最新版

Azkaban的两种运行模式

在版本3.0中,Azkaban提供了以下两种模式:

solo server mode:最简单的模式,数据库内置的H2数据库,AzkabanWebServer和AzkabanExecutorServer都在一个进程中运行,任务量不大项目可以采用此模式(特别适合初学者学习使用,功能齐全)。

multiple executor mode: 适用于更多的生产环境,其使用 MySQL 来进行元数据管理并且支持主从结构。在这种模式下web server和executor server 独立运行在不同的主机中。这种模式带来的好处是可以让Azkaban更加健壮和可扩展。

在学习的过程中,我们可以使用来solo server 这种模式来运行Azkaban实例。

3. Azkaban的下载和编译

下载之前 请确保本机的 Java 版本为 1.8 。

下载Azkaban源码:

Azkaban3.59.x 最新版

解压azkaban压缩包并进入该目录:

Azkaban3.59.x 最新版

azkaban-common: 基本的依赖包

azkaban-db: 框架核心组件-数据库工具

azkaban-exec-server & azkaban-web-server : 框架核心组件

azkaban-solo-server: 集成运行模式 工具 包

azkaban-spi : azkaban存储接口以及exception类

azkaban-hadoop-security-plugin: hadoop 有关kerberos插件

在编译源码之前,先要下载gradle的依赖包,至于要什么版本,查看如下:

Azkaban3.59.x 最新版

如下地址是Gradle的官方下载地址: https://services.gradle.org/distributions

下载好对应的版本后,将压缩包存放到如下位置:

Azkaban3.59.x 最新版

修改配置文件:

Azkaban3.59.x 最新版

返回安装包主目录执行编译程序(注意官方给出的编译版本不带测试命令-x test,示例如下)

# Build without running tests

>$ ./gradlew build installDist -x test

执行上面的命令,出现了git有关的异常,这里主要是系统没有安装git命令,使用yum install -y git,后重新执行步骤4,接下来等待漫长的下载(因为默认使用的是国外的gradle镜像进行资源下载)。

Azkaban3.59.x 最新版

为了减少编译时下载占用时间,一般会为gradle远程资源提供镜像地址方便下载

#在 ${AZKABAN_HOME}/build.gradle文件中配置,然后重新执行步骤4:
 mavenLocal()
 maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
 maven{ url 'http://maven.oschina.net/content/groups/public/'}

Azkaban3.59.x 最新版

4编译成功后,可以找到整个架构的每个部分都会多出一个build文件夹,这才是我们要安装的文件:

[root@azkabanvm azkaban]# ls azkaban-solo-server/build
 classes distributions install libs resources tmp
 [root@azkabanvm azkaban]# ls azkaban-exec-server/build
 classes distributions install libs resources tmp
 [root@azkabanvm azkaban]# ls azkaban-web-server/build
 classes distributions dust install jsToPackage less libs nodejs resources tmp
 [root@azkabanvm azkaban]# ls azkaban-db/build
 classes distributions install libs sql tmp

4. Azkaban-solo-server安装

在上一节的讲解中,我们已经完成Azkaban各个模块的编译。如下:

$AZKABAN_SOURCE_HOME/azkaban-solo-server/build/distributions/*.tar.gz(zip)

$AZKABAN_SOURCE_HOME/azkaban-web-server/build/distributions/*.tar.gz(zip)

$AZKABAN_SOURCE_HOME/azkaban-executor-server/build/distributions/*.tar.gz(zip)

将其对应包下的.tar.gz文件拷贝到独立的文件夹下(该文件夹用来安装 Azkaban)并解压,并且不要忘记拷贝azkaban-db/build/distributions/xxx.sql文件(这是一个数据库初始化的脚本文件) :

[root@azkabanvm packages]# ll
 total 58276
 drwxr-xr-x. 6 root root 4096 Sep 29 01:24 azkaban-exec-server-0.1.0-SNAPSHOT
 -rw-r--r--. 1 root root 15767192 Sep 29 01:24 azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
 drwxr-xr-x. 8 root root 4096 Sep 29 01:25 azkaban-solo-server-0.1.0-SNAPSHOT
 -rw-r--r--. 1 root root 23876418 Sep 29 01:25 azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
 drwxr-xr-x. 6 root root 4096 Sep 29 01:25 azkaban-web-server-0.1.0-SNAPSHOT
 -rw-r--r--. 1 root root 20009922 Sep 29 01:25 azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

初始化MySQL,这里直接贴出最简单的安装方式:

yum install -y mysql-server
 yum install -y mysql
 service mysqld start
 mysql> mysql -u root -p
 mysql> ##第一次安装没有密码 直接按Enter键 然后修改当前密码
 mysql> set password for 'root'@'localhost' = password('root') ;
 mysql> grant all privileges on *.* to root@192.168.60.13 identified by 'root';
 mysql> FLUSH PRIVILEGES;
 mysql> create database azkaban;

将 sql 文件导入到azkaban数据库中

mysql> use azkaban;

mysql> source /usr/local/azkaban/packages/create-all-sql-0.1.0-SNAPSHOT.sql;

mysql> show tables;

生成秘钥文件:

Azkaban3.59.x 最新版

打开azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties文件(这里主要配置的是数据库驱动和证书认证):

 default.timezone.id=Asia/Shanghai
 database.type=mysql
 mysql.port=3306
 ## 这里最好配置IP地址
 mysql.host=192.168.66.170
 mysql.database=azkaban
 mysql.user=root
 mysql.password=sql_9879
 mysql.numcOnnections=100
 jetty.use.ssl=true
 jetty.maxThreads=25
 jetty.ssl.port=8666
 jetty.port=8081
 #注意这里要统一配置好keystore文件存储的路径
 jetty.keystore=.../keystore
 jetty.password=000000
 jetty.keypassword=000000
 #注意这里要统一配置好keystore文件存储的路径
 jetty.truststore=.../keystore
 jetty.trustpassword=000000

从azkaban.properties文件内容可以看出还有一个文件是用来管理登录的用户的,那就是azkaban-users.xml,我们可以在这个文件中配置密码:

Azkaban3.59.x 最新版

在本机的 /etc/hosts 文件中添加本机IP地址的映射:

127.0.0.1 azkabanvm

返回azkaban-solo-server-0.1.0-SNAPSHOT目录,在这个目录下启动solo:

[root@azkabanvm azkaban-solo-server-0.1.0-SNAPSHOT]# bin/start-solo.sh
 [root@azkabanvm azkaban-solo-server-0.1.0-SNAPSHOT]# jps
 3252 Jps
 3227 AzkabanSingleServer
 #如果进程没有启动 可以在当前目录下会自动创建启动脚本的日志:
 [root@azkabanvm azkaban-solo-server-0.1.0-SNAPSHOT]# cat soloServerLog__2018-09-29+18\:30\:29.out

注意:上面的solo-server会创建一个叫AzkabanSingleServer的进程,并在启动一会之后主动退出,这个操作可以用来检查我们的配置文件是否正确。而我们真正要启动的是一个Executor 进程和 Web进程。

5. web/executor-server 安装

将solo-server下的azkaban.properties文件和azkaban-users.xml文件拷贝到web/conf 文件夹下。

启动web服务:

[root@azkabanvm azkaban-web-server-0.1.0-SNAPSHOT]# bin/start-web.sh
 [root@azkabanvm azkaban-web-server-0.1.0-SNAPSHOT]# jps
 3744 Jps
 3336 AzkabanWebServer
 

从启动的日志文件中我们也可以看到启动的端口,注意这里一定要保证防火墙是关闭的:

[root@azkabanvm azkaban-web-server-0.1.0-SNAPSHOT]# service iptables stop

在网页端访问ssl页面:

Azkaban3.59.x 最新版

将solo-server下的azkaban.properties文件和azkaban-users.xml文件拷贝到executor/conf 文件夹下。

进入executor文件夹,启动executor进程:

 [root@azkabanvm azkaban-exec-server-0.1.0-SNAPSHOT]# bin/start-exec.sh 
 [root@azkabanvm azkaban-exec-server-0.1.0-SNAPSHOT]# jps
 3634 Jps
 3607 AzkabanExecutorServer
 3336 AzkabanWebServer

6. 普通 shell 命令Job

登录页面后,创建一个Job项目。

Azkaban3.59.x 最新版

创建command.job文件,内容如下,拷贝完成后将其打包成zip文件 上传Job项目中:

#command.job

type=command

command=echo 'hello'

第一次执行项目时出现卡住的现象,主要是azkaban要求执行Job必须运行在最低有3G的内存空间里,如果你不需要这样的限制可以修改executor/plugins/jobtypes/commonprivate.properties文件,将memCheck.enabled=false。然后重启整个服务(包括web和executor)。重新执行任务才会成功。

7. HDFS操作的Job

除了可以在Azkaban上执行普通的shell命令,还可以执行HDFS的命令,接下来用一个小案例来实现:

Azkaban3.59.x 最新版

首先要确保命令没有错,接下来自己写一个job,内容如下:

#hdfs.job

type=command

command=/root/apps/hadoop/bin/hdfs dfs -ls /

在控制台查看结果如下:

Azkaban3.59.x 最新版

8. MapReduce操作的Job

既然可以操作HDFS,那么是否可以执行MapReduce , 为了验证这个结果,首先要有个MapReduce程序,如下:

Azkaban3.59.x 最新版

对于执行MapReduce,操作时候可以将jar包和job文件一起打包,也可以在job内部指定jar包的路径:

#mapreduce.job

type=command

command=/root/apps/hadoop/bin/hadoop jar /root/apps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar pi 5 5

执行结果如下:

Azkaban3.59.x 最新版

9. Hive操作的Job

首先 要保证环境中有hive工具可以使用,并有对应的数据库可以操作,hive.job内容如下:

##hive.job

type=command

command=/root/apps/hive/bin/hive -f curd.sql

curd.sql 内容如下:

describe user_info;

将这两部分内容打包到azkaban平台,执行如下:

Azkaban3.59.x 最新版

10. 任务的依赖关系

在Azkaban中实际生产中,更多使用的是多个不同任务的Job形成新的的Job,其内部的每个job都需要定义好执行的顺序,这里可以使用dependencies属性来配置。

 ##foo.job
 type=command
 command=echo "foo" 

##bar.job
 type=command
 dependencies=foo
 command=echo "bar"

11. Azkaban知识点补充

Azkaban支持的指令类型有很多种,比如shell指令,hadoop shell指令,Java代码,hadoop java代码,Pig 指令,Hive指令等等,但是最常见的还是shell 的command指令,官方路径是: https://azkaban.readthedocs.io/en/latest/jobTypes.html 。

在一个job中可以一次性执行多个不同的command指令,像 command.1 , command.2 等等…

 ##multiple commands job
 type=command
 command.1=ls /root
 command.2=mkdir /root/wolfcode
 command.3=...

当前我们最常用的是方式是通过Azkaban 提供的网页端来操作任务流,同时Azkaban 也提供了ajax api的方式来操作任务流,详情可以查看官方文档: https://azkaban.readthedocs.io/en/latest /ajaxApi.htmlhighlight=ajax 。

1.执行工作流界面:From the Flow View panel, you can right click on the graph and disable or enable jobs. Disabled jobs will be skipped during execution as if their dependencies have been met. Disabled jobs will appear translucent.

2.在工作流的左边还有一个通知面板,在当执行完成/成功/失败的时候,可以通过配置email来进行相关责任人的通知(这个模块因为及时性比较低 一般用不到)

3.在工作流左下角还有一个定时器的按钮,其时间的规范与crontab 的时间规范一致,其用来指定任务做定时执行。

Azkaban3.59.x 最新版


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • Spring Boot 永远滴神!10分钟快速入门
    为什么是SpringBoot因为目前开发WEB应用,SpringBoot是启动Spring项目最快最流行的方式了。无论我们要构建一个什么样的应用,它都可 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
author-avatar
我叫33妹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有