Hadoop - Azkaban 作业调度

1.概述

  在调度 Hadoop 的相关作业时,有以下几种方式:

  • 基于 Linux 系统级别的 Crontab。
  • Java 应用级别的 Quartz。
  • 第三方的调度系统。
  • 自行开发 Hadoop 应用调度系统。

  对于前两种,使用 Crontab 和 Quartz 是基本可以满足业务需求,但有其弊端。在 Job 数量庞大的情况下,Crontab
脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。Quartz 虽然不用编写脚本,实现对应的调度 API
即可,然其调度过程不透明,不涵盖 Job 运行详情。需自行开发其功能。

  因而,第三方的调度系统便应运而生了。在《Hadoop - 任务调度系统比较》一文中,介绍第三方调度系统之间的差异。这里笔者就不多赘述了。本篇博文,笔者给大家介绍 Azkaban 的相关使用心得,以及在使用中遇到的种种问题和解决思路。

2.内容

  Azkaban 托管在 Github 上,属于开源产品。它由以下几部分组成:

  • Web Server
  • Executor Server
  • MySQL
  • Plugins(HDFS,JobType,HadoopSecurityManager,JobSummary,PigVisualizer,Reportal)

  其各个模块的功能,在《Hadoop - 任务调度系统比较》中有对应的介绍,这里就不多赘述了。

2.1 How to use

  在介绍完其核心模块后,我们如何使用这样一个调度系统,来调度我们所编写好的应用。下面,笔者将详细为大家介绍如何来完成这部分工作。

  首先,Azkaban 是一个独立的系统,不需要依赖 Hadoop 集群环境。我们可以用单独的节点来构建这样一个调度系统。但是根据系统本身的需要,依赖以下环境:

  • JDK
  • MySQL

  在准备完成以上依赖环境后,我们可以构建这样一个调度系统。在[官网]上下载二进制安装包。官网更新的二进制安装包比 Github 发布的较低,若需要使用新版本的 Azkaban ,可在 Github 上下载。

  在准备好安装包后,我们开始去部署相关安装包。

2.2 How to install

2.2.1 DB Setup

  首先,我们要在 MySQL 中新建 Azkaban 的数据库,操作内容如下所示:


1

mysql> CREATE DATABASE azkaban;

  然后,我们创建所需要的表,内容如下:


1

mysql>source ${AZKABAN_HOME}/sql/create-all-sql-2.5.0.sql;

  SQL 文件在你安装包 azkaban-sql-script-2.5.0.tar.gz 中,找到 create-all-sql-2.5.0.sql 执行即可。执行成功后,会在 Azkaban 的数据库下,生成以下表:

2.2.2 Web Server Setup

  接下来是安装 Web Server,解压其安装包,然后在 conf 目录下配置相关文件即可:

  • azkaban.properties

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

#Azkaban Personalization Settings

azkaban.name=Test

azkaban.label=My Local Azkaban

azkaban.color=#FF3601

azkaban.default.servlet.path=/index

web.resource.dir=/home/hadoop/azkaban/server/web/web/

#default.timezone.id=America/Los_Angeles

default.timezone.id=Asia/Shanghai

#Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager

user.manager.xml.file=/home/hadoop/azkaban/server/web/conf/azkaban-users.xml

 

#Loader for projects

executor.global.properties=conf/global.properties

azkaban.project.dir=projects

 

#plugins

viewer.plugin.dir=/home/hadoop/azkaban/server/web/plugins/viewer/hdfs

#viewer.plugin.dir=hdfs

#viewer.plugins=hdfs

 

database.type=mysql

mysql.port=3306

mysql.host=nna

mysql.database=azkaban

mysql.user=root

mysql.password=root

mysql.numconnections=100

 

# Velocity dev mode

velocity.dev.mode=false

 

# Azkaban Jetty server properties.

jetty.maxThreads=25

jetty.ssl.port=8443

jetty.port=8081

jetty.keystore=/home/hadoop/azkaban/server/web/conf/keystore

jetty.password=password

jetty.keypassword=password

jetty.truststore=/home/hadoop/azkaban/server/web/conf/keystore

jetty.trustpassword=password

 

# Azkaban Executor settings

executor.port=12321

 

# mail settings

mail.user=your_mail_server@example.com

mail. password=xxxxx

 

lockdown.create.projects=false

 

cache.directory=cache

  另外,Azkaban 需要使用到 KeyStore,在 ${AZKABAN_WEB_SERVER}/conf 下运行如下命令,内容如下所示:


1

keytool -keystore keystore -alias azkaban -genkey -keyalg RSA

  启动之前先在 ${AZKABAN_WEB_SERVER} 目录下创建 logs 目录,进入 ${AZKABAN_WEB_SERVER} 目录,运行如下命令:


1

../bin/azkaban-web-start

  成功启动,出现以下截图信息:

  然后,输入在浏览器中 https://your_host:8443 出现以下界面:

  接着输入用户名和密码:azkaban/azkaban 便可进入到调度系统中。

2.2.3 Executor Setup

   Web Server 只是提供可视化,要想调度我们所编写的应用,需要依赖 Executor 服务。在 ${AZKABAN_EXECUTOR}/conf 下配置以下内容:

  • azkaban.properties

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#Azkaban

default.timezone.id=America/Los_Angeles

 

# Azkaban JobTypes Plugins

azkaban.jobtype.plugin.dir=plugins/jobtypes

 

#Loader for projects

executor.global.properties=conf/global.properties

azkaban.project.dir=projects

 

database.type=mysql

mysql.port=3306

mysql.host=nna

mysql.database=azkaban

mysql.user=root

mysql.password=root

mysql.numconnections=100

 

# Azkaban Executor settings

executor.maxThreads=50

executor.port=12321

executor.flow.threads=30

  然后执行以下命令即可:


1

azkaban-executor-start.sh

3.Flow

  下面给大家介绍使用流程,首先,我们在 Web Server 的 Web Console 上创建一个项目,如下图所示:

  然后,点击上传按钮,将我们编写好的应用进行打包上传。这里 WordCount 为例子。如下图所示:

  在 WordCount.zip 文件中,包含两个文件,一个是我们编写需要执行的 JAR 文件,另一个是对 JAR 文件进行描述的 Job 文件,即:WordCount.job,其内容涉及如下:


1

2

type=javaprocess

java.class=cn.java.Hello

  这里笔者只是做了最小化配置,指明执行类型,和 Java 的 MainClass。

  在 Executor Flow 中可以设置,告警通知者,在执行完成,或是失败的时候通知应用开发者,让其知晓执行进度,如下所示:

  如上图,我们点击 Schedule 按钮,可以设置调度的时间。如下图所示:

  在调度模块,现实该项目任务的调度信息,如下图所示:

  在上图中,我们还可以设置 SLA 告警模块,在执行 Job 的过程中,若是任务超出限定时间,会将告警信息通知所这是的人。如下图所示:

  另外,我们可以在 Executing 模块查看正在执行的 Job,在 History 模块下可以查看已执行完成的 Job。若是需要使用 Azkaban 来查看 HDFS 文件系统的结构目录,添加对应的插件即可。这里就不多赘述了。

4.总结

  这里需要注意的是,由于我们所编写的应用会上传到 MySQL 存储,这里需要设置 MySQL 的 max_allowed_packet 变量,在 /etc/my.cnf 中进行配置,内容如下所示:


1

2

[mysqld]

max_allowed_packet=1024M

  然后重启 MySQL 的服务即可。另外,官方发布的 Azkaban-2.5 版本,路径设置有问题,解决方式有两种:第一,按照错误提示,配置对应的路径;第二,修改源码中的路径读取代码,然后重新打包编译。

5.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

时间: 2024-10-01 04:46:30

Hadoop - Azkaban 作业调度的相关文章

Hadoop实战之 hadoop作业调度详解

对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要.我们不一定能用得上Hadoop,但是如果理通顺Hadoop的分布式调度原理,在有需要的时候未必不能自己写一个Mini Hadoop~: ) 开始 Map/Reduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的,Google已经将它完整的MapReduce论 文公开发布了.其中对它的定义是,Map/Reduce是一

基于反馈的动态负载平衡调度算法在Hadoop异构环境中的设计与实现

基于反馈的动态负载平衡调度算法在Hadoop异构环境中的设计与实现 南京理工大学  李元洪 本文在介绍云计算的基本概念.体系结构及其应用发展的基础上,分析了云计算模型的实现框架和容错机制.针对云计算Hadoop开源平台,详细分析了其中的分布式文件系统(HDFS, Hadoop Distributed File System)和MapReduce计算模型,并对Hadoop平台下的作业调度技术.FIFO.公平队列和计算能力作业调度算法做了深入的研究. 对Hadoop现有的调度算法在异构环境下的计算性

What is Apache Hadoop?

本文来自:自译+百度Apache Hadoop 是一款可靠.可升级.分布式计算的开源软件.Apache Hadoop 的开源软件库是专门为处理跨大数据簇而设计的处理模型族.它主要被设计用来按比例从一个到成千上万的无服务平均的分配计算任务和内存.而不是依靠硬件提供高可用性,库本身的目的是检测和处理应用层的故障,因此再一组计算机上提供高可用性服务,每一台计算机都容易出现故障.这个项目包括这些模型:Hadoop Common:支持其它Hadoop模块的通用实用程序. Hadoop Distribute

如何实现hadoop集群间通信和作业调度?

问题描述 有多个hadoop集群,各集群的hadoop版本一致,这几个hadoop集群可能分布在不同地域.1.要求能在其中一个集群的管理端看到其他集群的节点信息,比如hdfs的文件目录信息等.2.要求在其中任意节点下发MR(或hive,spark)作业,在数据所在的集群执行此MR(或hive,spark)作业,也就是在数据所在集群执行作业.请各位帮忙提供一些建议或者解决思路,谢谢啦! 解决方案 解决方案二:考虑hadoop的federation,做适当配置修改.

Hadoop 生态系统

1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归纳总结,进而将其以表格的形式进行了罗列.涉及的内容有以下几点: 分布式文件系统 分布式编程模型 NoSQL 数据库 SQL-On-Hadoop 数据采集 编程服务中间件 调度系统 系统部署 数据可视化 2.内容 2.1 分布式文件系统 2.1.1 Apache HDFS 在分布式文件系统当中,首先为

国外、国内Hadoop的应用现状

国外.国内Hadoop的应用现状 2015-04-23 大数据 摘要:Hadoop是一个开源的高效云计算基础架构平台,其不仅仅在云计算领域用途广泛,还可以支撑搜索引擎服务,作为搜索引擎底层的基础架构系统,同时在海量数据处理.数据挖掘.机器学习.科学计算等领域都越来越受到青睐.本文将讲述国外.国内Hadoop的主要应用现状. 国外Hadoop的应用现状 1.Yahoo Yahoo是Hadoop的最大支持者,截至2012年,Yahoo的Hadoop机器总节点数目超过42?000个,有超过10万的核心

教你如何挑选合适的大数据或Hadoop平台

今年,大数据在很多公司都成为相关话题.虽然没有一个标准的定义来解释何为 "大数据",但在处理大数据上,Hadoop已经成为事实上的标准.IBM.Oracle.SAP.甚至Microsoft等几乎所有的大型软件提供商都采用了Hadoop.然而,当你已经决定要使用Hadoop来处理大数据时,首先碰到的问题就是如何开始以及选择哪一种产品.你有多种选择来安装Hadoop的一个版本并实现大数据处理.本文讨论了不同的选择,并推荐了每种选择的适用场合. Hadoop平台的多种选择 下图展示了Hado

Hadoop学习资源集合

Hadoop是一个由Apache基金会所开发的开源分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储.Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取.变形和加载(ETL)方面上的天然优势.Hadoop的分布式架构,将大数据处理引擎尽可能的靠近存储. 目录: Awesome Hadoop Hadoop YARN NoSQL Hadoop上的SQL 数据管理 工作流.生命周期及管理 数据提取与整合 DSL 库和工具 实时

如何挑选合适的大数据或Hadoop平台?

文章讲的是如何挑选合适的大数据或Hadoop平台,今年,大数据在很多公司都成为相关话题.虽然没有一个标准的定义来解释何为 "大数据",但在处理大数据上,Hadoop已经成为事实上的标准.IBM.Oracle.SAP.甚至Microsoft等几乎所有的大型软件提供商都采用了Hadoop.然而,当你已经决定要使用Hadoop来处理大数据时,首先碰到的问题就是如何开始以及选择哪一种产品.你有多种选择来安装Hadoop的一个版本并实现大数据处理.本文讨论了不同的选择,并推荐了每种选择的适用场合