天天看点

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

基于 linux 系统级别的 crontab。

java 应用级别的 quartz。

第三方的调度系统。

自行开发 hadoop 应用调度系统。

  对于前两种,使用 crontab 和 quartz 是基本可以满足业务需求,但有其弊端。在 job 数量庞大的情况下,crontab

脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。quartz 虽然不用编写脚本,实现对应的调度 api

即可,然其调度过程不透明,不涵盖 job 运行详情。需自行开发其功能。

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

web server

executor server

mysql

plugins(hdfs,jobtype,hadoopsecuritymanager,jobsummary,pigvisualizer,reportal)

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

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

jdk

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

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

1

<code>mysql&gt;</code><code>create</code> <code>database</code> <code>azkaban;</code>

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

<code>mysql&gt;source ${azkaban_home}/sql/</code><code>create</code><code>-</code><code>all</code><code>-sql-2.5.0.sql;</code>

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

azkaban.properties

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

<code>#azkaban personalization settings</code>

<code>azkaban.name=test</code>

<code>azkaban.label=my local azkaban</code>

<code>azkaban.color=</code><code>#ff3601</code>

<code>azkaban.default.servlet.path=</code><code>/index</code>

<code>web.resource.</code><code>dir</code><code>=</code><code>/home/hadoop/azkaban/server/web/web/</code>

<code>#default.timezone.id=america/los_angeles</code>

<code>default.timezone.</code><code>id</code><code>=asia</code><code>/shanghai</code>

<code>#azkaban usermanager class</code>

<code>user.manager.class=azkaban.user.xmlusermanager</code>

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

<code>#loader for projects</code>

<code>executor.global.properties=conf</code><code>/global</code><code>.properties</code>

<code>azkaban.project.</code><code>dir</code><code>=projects</code>

<code>#plugins</code>

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

<code>#viewer.plugin.dir=hdfs</code>

<code>#viewer.plugins=hdfs</code>

<code>database.</code><code>type</code><code>=mysql</code>

<code>mysql.port=3306</code>

<code>mysql.host=nna</code>

<code>mysql.database=azkaban</code>

<code>mysql.user=root</code>

<code>mysql.password=root</code>

<code>mysql.numconnections=100</code>

<code># velocity dev mode</code>

<code>velocity.dev.mode=</code><code>false</code>

<code># azkaban jetty server properties.</code>

<code>jetty.maxthreads=25</code>

<code>jetty.ssl.port=8443</code>

<code>jetty.port=8081</code>

<code>jetty.keystore=</code><code>/home/hadoop/azkaban/server/web/conf/keystore</code>

<code>jetty.password=password</code>

<code>jetty.keypassword=password</code>

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

<code>jetty.trustpassword=password</code>

<code># azkaban executor settings</code>

<code>executor.port=12321</code>

<code># mail settings</code>

<code>[email protected]</code>

<code>mail. password=xxxxx</code>

<code>lockdown.create.projects=</code><code>false</code>

<code>cache.directory=cache</code>

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

<code>keytool -keystore keystore -</code><code>alias</code> <code>azkaban -genkey -keyalg rsa</code>

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

<code>..</code><code>/bin/azkaban-web-start</code>

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

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

<code>#azkaban</code>

<code>default.timezone.</code><code>id</code><code>=america</code><code>/los_angeles</code>

<code># azkaban jobtypes plugins</code>

<code>azkaban.jobtype.plugin.</code><code>dir</code><code>=plugins</code><code>/jobtypes</code>

<code>executor.maxthreads=50</code>

<code>executor.flow.threads=30</code>

  然后执行以下命令即可:

<code>azkaban-executor-start.sh</code>

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

<code>type</code><code>=javaprocess</code>

<code>java.class=cn.java.hello</code>

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

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

Hadoop - Azkaban 作业调度1.概述2.内容3.Flow4.总结5.结束语

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

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

<code>[mysqld]</code>

<code>max_allowed_packet=1024m</code>

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

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

继续阅读