Azkaban面试题 一般有用 看1 速

本文介绍了LinkedIn开发的Azkaban工作流调度器,如何管理和调度Hadoop、MapReduce、Hive任务,以及其特点、架构、安装配置和实战应用,包括单一任务、邮件通知、多任务依赖和使用Java、HDFS、MapReduce和Hive的示例。
摘要由CSDN通过智能技术生成

Azkaban 是由Linkedin 公司推出的一个批量工作流任务调度器,主要用于在一个工作流 内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的 key:value 对的方式, 通 过配置中的 Dependencies 来设置依赖关系。Azkaban 使用job 配置文件建立任务之间的依赖 关系, 并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。

1.2 为什么需要工作流调度系统(1) 一个完整的数据分析系统通常都是由大量任务单元组成:Shell 脚本程序,Java 程序,MapReduce 程序、 Hive 脚本等

(2) 各任务单元之间存在时间先后及前后依赖关系

(3) 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;例如, 我们可能有这样一个需求,某个业务系统每天产生 20G 原始数据,我们每天都 要对其进行处理,处理步骤如下所示:

通过 Hadoop 先将原始数据上传到 HDFS 上 (HDFS 的操作);使用 MapReduce 对原始数据进行清洗 (MapReduce 的操作);将清洗后的数据导入到 hive 表中 (hive 的导入操作) ;对 Hive 中多个表的数据进行 JOIN 处理, 得到一张 hive 的明细表 (创建中间表) ;通过对明细表的统计和分析,得到结果报表信息 (hive 的查询操作) ;

1.3 Azkaban 特点兼容任何版本的 hadoop易于使用的 Web 用户界面简单的工作流的上传方便设置任务之间的关系调度工作流模块化和可插拔的插件机制认证/授权(权限的工作)能够杀死并重新启动工作流有关失败和成功的电子邮件提醒1.4 常见工作流调度系统1)简单的任务调度:直接使用 crontab 实现; 2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如 ooize 、azkaban 等

1.5 Azkaban 的架构

Azkaban 由三个关键组件构成:

AzkabanWebServer:AzkabanWebServer 是整个Azkaban 工作流系统的主要管理者, 它用户登录认证、负责 project 管理、 定时执行工作流、跟踪工作流执行进度等一 系列任务。AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过 mysql 数据库 来协调任务的执行。关系型数据库(MySQL ) :存储大部分执行流状态, AzkabanWebServer 和 AzkabanExecutorServer 都需要访问数据库。1.6 Azkaban 下载地址下载地址:http://azkaban.github.io/downloads.html

2.1 安装前准备将 Azkaban Web 服务器、Azkaban 执行服务器、Azkaban 的 sql 执行脚本及 MySQL 安 装包拷贝到 hadoop102 虚拟机/opt/software 目录下a) azkaban-web-server-2.5.0.tar.gzb) azkaban-executor-server-2.5.0.tar.gzc) azkaban-sql-script-2.5.0.tar.gzd) mysql-libs.zip选择 Mysql 作为 Azkaban 数据库,因为 Azkaban 建立了一些 Mysql 连接增强功能, 以 方便 Azkaban 设置。并增强服务可靠性。 (参见 hive 文档2.4)2.2 安装 Azkaban在/opt/module/目录下创建 azkaban 目录

解压 azkaban-web-server-2.5.0.tar.gz 、azkaban-executor-server-2.5.0.tar.gz 、azkaban-sql-script-2.5.0.tar.gz 到/opt/module/azkaban 目录下

[atguigu@hadoop102 software]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz-C /opt/module/azkaban/[atguigu@hadoop102 software]$ tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/ [atguigu@hadoop102 software]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/ 12345对解压后的文件重新命名[atguigu@hadoop102 azkaban]$ mv azkaban-web-2.5.0/ server [atguigu@hadoop102 azkaban]$ mv azkaban-executor-2.5.0/ executor

azkaban 脚本导入进入 mysql ,创建 azkaban 数据库,并将解压的脚本导入到 azkaban 数据库。

[atguigu@hadoop102 azkaban]$ mysql -uroot -p000000 mysql> create database azkaban; mysql> use azkaban; mysql> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql 12345注: source 后跟.sql 文件, 用于批量处理.sql 文件中的 sql 语句。

2.3 生成密钥对和证书Keytool 是java 数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。 -keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore 文件中) -genkey(或者-genkeypair) 生成密钥对-alias 为生成的密钥对指定别名,如果没有默认是 mykey-keyalg 指定密钥的算法 RSA/DSA 默认是 DSA

1)生成 keystore 的密码及相应信息的密钥库[atguigu@hadoop102 azkaban]$ keytool -keystore keystore -alias jetty - genkey -keyalg RSA输入密钥库口令 :再次输入新口令 :您的名字与姓氏是什么?[Unknown]:您的组织单位名称是什么?[Unknown]:您的组织名称是什么?[Unknown]:您所在的城市或区域名称是什么?[Unknown]:您所在的省/市/自治区名称是什么?[Unknown]:该单位的双字母国家/地区代码是什么?[Unknown]:CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 是否 正确?[否]: y

输入 的密钥口令(如果和密钥库口令相同, 按回车):

注意:密钥库的密码至少必须 6 个字符,可以是纯数字或者字母或者数字和字母的组合等等 密钥库的密码最好和 的密钥相同,方便记忆2)将 keystore 拷贝到 azkaban web 服务器根目录中 [atguigu@hadoop102 azkaban]$ mv keystore /opt/module/azkaban/server/

2.4 时间同步配置先配置好服务器节点上的时区

如果在/usr/share/zoneinfo/这个目录下不存在时区配置文件 Asia/Shanghai ,就要用tzselect 生成。 [atguigu@hadoop102 azkaban]$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none - I want to specify the time zone using the Posix TZ format. #? 5 Please select a country. 35) Palestine36) Philippines37) Qatar38) Russia39) Saudi Arabia40) Singapore41) Sri Lanka42) Syria43) Taiwan44) Tajikistan45) Thailand46) Turkmenistan47) United Arab Emirates48) Uzbekistan49) Vietnam50) Yemen17) Iraq#? 9Please select one of the following time zone regions.1) Beijing Time2) Xinjiang Time#? 1

123456789101112131415161718192021222324252627282930313233拷贝该时区文件,覆盖系统本地时区配置[atguigu@hadoop102 azkaban]$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime3)集群时间同步 (同时发给三个窗口)[atguigu@hadoop102 azkaban]$ sudo date -s ‘2018-10-18 16:39:30’

2.5 配置文件2.5.1 Web 服务器配置1)进入 azkaban web 服务器安装目录 conf 目录,打开 azkaban.properties 文件

[atguigu@hadoop102 conf]$ pwd /opt/module/azkaban/server/conf [atguigu@hadoop102 conf]$ vim azkaban.properties 123按照如下配置修改 azkaban.properties 文件。#Azkaban Personalization Settings #服务器 UI 名称,用于服务器上方显示的名字 azkaban.name=Test #描述 azkaban.label=My Local Azkaban #UI 颜色 azkaban.color=#FF3601 azkaban.default.servlet.path=/index

#默认 web server 存放 web 文件的目录 web.resource.dir=/opt/module/azkaban/server/web/

#默认时区,已改为亚洲/上海 默认为美国 default.timezone.id=Asia/Shanghai #Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类(绝对路径) user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml#Loader for projects #global 配置文件所在位置(绝对路径) executor.global.properties=/opt/module/azkaban/executor/conf/global.pro perties azkaban.project.dir=projects

123456789101112131415161718192021222324web 服务器用户配置在 azkaban web 服务器安装目录 conf 目录,按照如下配置修改 azkaban-users.xml 文件,增加管理员用户。<role name="metrics" permissions="METRICS"/> </azkaban-users> 122.5.2 执行服务器配置进入执行服务器安装目录 conf,打开 azkaban.properties[atguigu@hadoop102 conf]$ pwd /opt/module/azkaban/executor/conf [atguigu@hadoop102 conf]$ vim azkaban.properties

2) 按照如下配置修改 azkaban.properties 文件。#Azkaban

#时区

default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins #jobtype 插件所在位置 azkaban.jobtype.plugin.dir=plugins/jobtypes #Loader for projects

executor.global.properties=/opt/module/azkaban/executor/conf/global.pro perties

azkaban.project.dir=projects

database.type=mysql mysql.port=3306

mysql.host=hadoop102 mysql.database=azkaban

mysql.user=root mysql.password=000000

mysql.numconnections=100 # Azkaban Executor settings #最大线程数 executor.maxThreads=50 #端口号(如修改,请与 web 服务中一致) executor.port=12321 #线程数 executor.flow.threads=30

123456789101112131415161718192021222324252627282930313233343536373839402.6 启动 Executor 服务器在 executor 服务器目录下执行启动命令

[atguigu@hadoop102 executor]$ pwd /opt/module/azkaban/executor [atguigu@hadoop102 executor]$ bin/azkaban-executor-start.sh 1232.7 启动 Web 服务器在 azkaban web 服务器目录下执行启动命令

[atguigu@hadoop102 server]$ pwd /opt/module/azkaban/server [atguigu@hadoop102 server]$ bin/azkaban-web-start.sh 123注意:先执行 executor,再执行 web,避免 Web Server 会因为找不到执行器启动失败。jps 查看进程

启动完成后,在浏览器(建议使用谷歌浏览器)中输入 https://服务器 IP 地址:8443 ,即可访问 azkaban 服务了。在登录中输入刚才在 azkaban-users.xml 文件中新添加的户用名及密码,点击 login。

三 Azkaban 实战Azkaban 内置的任务类型支持 command、java

3.1 单一 job 案例1.案例实操

创建job 描述文件[atguigu@hadoop102 jobs]$ vim first.job#first.jobtype=commandcommand=echo ‘this is my first job’将job 资源文件打包成 zip 文件[atguigu@hadoop102 jobs]$ zipadding: first.job (deflated[atguigu@hadoop102 jobs]$ ll总用量 8注意:目前, Azkaban 上传的工作流文件只支持 xxx.zip 文件。 zip 应包含 xxx.job 运行作业所需的 文件和任何文件 (文件名后缀必须以.job 结尾, 否则无法识别) 。作业名称在项目中必须是 唯一的。3) 通过 azkaban 的 web 管理平台创建 project 并上传job 的 zip 包 首先创建 project

上传 zip 包

启动执行该job

点击执行工作流

点击继续

Job 执行成功

点击查看job 日志

3.2 邮件通知配置案例修改配置文件修改 server 的 conf 下的 azkaban.properties 文件

2)在网页上进行配置

3.3 多 job 工作流案例创建有依赖关系的多个job 描述 第一个job:start.job第一个job:start.job[atguigu@hadoop102 jobs]$ vim start.job#start.jobtype=commandcommand=touch /opt/module/kangkang.txt

第二个job:step1.job 依赖 start.job[atguigu@hadoop102 jobs]$ vim step1 .job#step1 .jobtype=commanddependencies=startcommand=echo "this is step1 job"第三个job:step2.job 依赖 start.job[atguigu@hadoop102 jobs]$ vim step2.job#step2.jobtype=commanddependencies=startcommand=echo "this is step2 job"第四个job:finish.job 依赖 step1.job 和 step2.job

12345678910111213141516171819[atguigu@hadoop102 jobs]$ vim finish.job#finish.jobtype=commanddependencies=step1,step2command=echo "this is finish job"12345将所有job 资源文件打到一个 zip 包中[atguigu@hadoop102 jobs]$ zip jobs.zip start.job step1.job step2.jobfinish.jobupdating: start.job (deflated 16%)adding: step1.job (deflated 12%)adding: step2.job (deflated 12%)adding: finish.job (deflated 14%)123456在 azkaban 的 web 管理界面创建工程并上传 zip 包

启动工作流 flow

查看结果

思考:将 student.txt 文件上传到 hdfs,根据所传文件创建外部表, 再将表中查询到的结果写入到本 地文件

3.4 Java 操作任务使用 Azkaban 调度java 程序

编写java 程序import java.io.IOException;

public class AzkabanTest { public void run() throws IOException { // 根据需求编写具体代码 FileOutputStream fos = newFileOutputStream("/opt/module/azkaban/output.txt");

fos.write("this is a java progress".getBytes());

fos.close(); }

public static void main(String[] args) throws IOException { AzkabanTest azkabanTest = new AzkabanTest();

azkabanTest.run ();}}

1234567891011121314151617181920将java 程序打成jar 包,创建 lib 目录,将 jar 放入 lib 内[atguigu@hadoop102 azkaban]$ mkdir lib [atguigu@hadoop102 azkaban]$ cd lib/ [atguigu@hadoop102 lib]$ ll 总用量 4 -rw-rw-r--. 1 atguigu atguigu 3355 10 月 18 20:55 azkaban-0.0.1- SNAPSHOT.jar 123456编写job 文件[atguigu@hadoop102 jobs]$ vim azkabanJava.job #azkabanJava.job

type=javaprocess java.class=com.atguigu.azkaban.AzkabanTest classpath=/opt/module/azkaban/lib/* 1234564)将 job 文件打成 zip 包

[atguigu@hadoop102 jobs]$ zip azkabanJava.zip azkabanJava.job adding: azkabanJava.job (deflated 19%) 12通过 azkaban 的 web 管理平台创建 project 并上传job 压缩包,启动执行该job

atguigu@hadoop102 azkaban]$ pwd/opt/module/azkaban[atguigu@hadoop102 azkaban]$ ll总用量 24drwxrwxr-x. 2 atguigu atguigu 4096 10 月 17 17:14 azkaban-2.5.0 drwxrwxr-x. 10 atguigu atguigu 4096 10 月 18 17:17 executor drwxrwxr-x. 2 atguigu atguigu 4096 10 月 18 20:35 jobs drwxrwxr-x. 2 atguigu atguigu 4096 10 月 18 20:54 lib-rw-rw-r--. 1 atguigu atguigu 23 10 月 18 20:55 outputdrwxrwxr-x. 9 atguigu atguigu 4096 10 月 18 17:17 server[atguigu@hadoop102 azkaban]$ cat outputthis is a java progress

123456789103.5 HDFS 操作任务1)创建job 描述文件

[atguigu@hadoop102 jobs]$ vim fs.job #hdfs job type=command command=/opt/module/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban 12342)将 job 资源文件打包成 zip 文件

[atguigu@hadoop102 jobs]$ zip fs.zip fs.job adding: fs.job (deflated 12%) 123)通过 azkaban 的 web 管理平台创建 project 并上传job 压缩包4)启动执行该job5)查看结果

3.6 MapReduce 任务MapReduce 任务依然可以使用Azkaban 进行调度

创建job 描述文件,及 mr 程序jar 包 [atguigu@hadoop102 jobs]$ vim mapreduce.job#mapreduce jobtype=commandcommand=/opt/module/hadoop-2.7.2/bin/hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jarwordcount /wordcount/input /wordcount/output123456将所有job 资源文件打到一个 zip 包中[atguigu@hadoop102 jobs]$ zip mapreduce.zip mapreduce.jobadding: mapreduce.job (deflated 43%)

123在 azkaban 的 web 管理界面创建工程并上传 zip 包启动job5)查看结果

3.7 Hive 脚本任务创建job 描述文件和 hive 脚本(1) Hive 脚本:student.sql[atguigu@hadoop102 jobs]$ vim student.sqluse default;drop table student;create table student(id int, name string)row format delimited fields terminated by '\t';load data local inpath '/opt/module/datas/student.txt' into tablestudent;insert overwrite local directory '/opt/module/datas/student'row format delimited fields terminated by '\t'select * from student;

123456789101112(2) Job 描述文件: hive.job

[atguigu@hadoop102 jobs]$ vim hive.job#hive jobtype=commandcommand=/opt/module/hive/bin/hive/opt/module/azkaban/jobs/student.sql12345将所有job 资源文件打到一个 zip 包中[atguigu@hadoop102 jobs]$ zip hive.zip hive.jobadding: hive.job (deflated 21%)12在 azkaban 的 web 管理界面创建工程并上传 zip 包

启动job

5)查看结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值