本文共 4720 字,大约阅读时间需要 15 分钟。
在调度 Hadoop 的相关作业时,有以下几种方式:
对于前两种,使用 Crontab 和 Quartz 是基本可以满足业务需求,但有其弊端。在 Job 数量庞大的情况下,Crontab 脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。Quartz 虽然不用编写脚本,实现对应的调度 API 即可,然其调度过程不透明,不涵盖 Job 运行详情。需自行开发其功能。
因而,第三方的调度系统便应运而生了。在《》一文中,介绍第三方调度系统之间的差异。这里笔者就不多赘述了。本篇博文,笔者给大家介绍 Azkaban 的相关使用心得,以及在使用中遇到的种种问题和解决思路。
Azkaban 托管在 Github 上,属于开源产品。它由以下几部分组成:
其各个模块的功能,在《》中有对应的介绍,这里就不多赘述了。
在介绍完其核心模块后,我们如何使用这样一个调度系统,来调度我们所编写好的应用。下面,笔者将详细为大家介绍如何来完成这部分工作。
首先,Azkaban 是一个独立的系统,不需要依赖 Hadoop 集群环境。我们可以用单独的节点来构建这样一个调度系统。但是根据系统本身的需要,依赖以下环境:
在准备完成以上依赖环境后,我们可以构建这样一个调度系统。在[]上下载二进制安装包。官网更新的二进制安装包比 Github 发布的较低,若需要使用新版本的 Azkaban ,可在 Github 上下载。
在准备好安装包后,我们开始去部署相关安装包。
首先,我们要在 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 的数据库下,生成以下表:
接下来是安装 Web Server,解压其安装包,然后在 conf 目录下配置相关文件即可:
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 便可进入到调度系统中。
Web Server 只是提供可视化,要想调度我们所编写的应用,需要依赖 Executor 服务。在 ${AZKABAN_EXECUTOR}/conf 下配置以下内容:
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 |
下面给大家介绍使用流程,首先,我们在 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 文件系统的结构目录,添加对应的插件即可。这里就不多赘述了。
这里需要注意的是,由于我们所编写的应用会上传到 MySQL 存储,这里需要设置 MySQL 的 max_allowed_packet 变量,在 /etc/my.cnf 中进行配置,内容如下所示:
1 2 | [mysqld] max_allowed_packet=1024M |
然后重启 MySQL 的服务即可。另外,官方发布的 Azkaban-2.5 版本,路径设置有问题,解决方式有两种:第一,按照错误提示,配置对应的路径;第二,修改源码中的路径读取代码,然后重新打包编译。
这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!
转载地址:http://ycyla.baihongyu.com/