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 的数据库,操作内容如下所示:
mysql> CREATE DATABASE azkaban;
然后,我们创建所需要的表,内容如下:
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
#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 下运行如下命令,内容如下所示:
keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
启动之前先在 ${AZKABAN_WEB_SERVER} 目录下创建 logs 目录,进入 ${AZKABAN_WEB_SERVER} 目录,运行如下命令:
../bin/azkaban-web-start
成功启动,出现以下截图信息:
然后,输入在浏览器中 https://your_host:8443 出现以下界面:
接着输入用户名和密码:azkaban/azkaban 便可进入到调度系统中。
2.2.3 Executor Setup
Web Server 只是提供可视化,要想调度我们所编写的应用,需要依赖 Executor 服务。在 ${AZKABAN_EXECUTOR}/conf 下配置以下内容:
- azkaban.properties
#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
然后执行以下命令即可:
azkaban-executor-start.sh
3.Flow
下面给大家介绍使用流程,首先,我们在 Web Server 的 Web Console 上创建一个项目,如下图所示:
然后,点击上传按钮,将我们编写好的应用进行打包上传。这里 WordCount 为例子。如下图所示:
在 WordCount.zip 文件中,包含两个文件,一个是我们编写需要执行的 JAR 文件,另一个是对 JAR 文件进行描述的 Job 文件,即:WordCount.job,其内容涉及如下:
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 中进行配置,内容如下所示:
[mysqld]
max_allowed_packet=1024M
然后重启 MySQL 的服务即可。另外,官方发布的 Azkaban-2.5 版本,路径设置有问题,解决方式有两种:第一,按照错误提示,配置对应的路径;第二,修改源码中的路径读取代码,然后重新打包编译。
5.结束语
这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!
Hadoop - Azkaban 作业调度的更多相关文章
-
Azkaban 作业调度
转载一篇不错的文章:http://www.cnblogs.com/smartloli/p/5191155.html
-
Hadoop实战之二~ hadoop作业调度详解(1)
对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要.我们不一定能用得上Hadoop,但是如果理通顺Hado ...
-
Hadoop调度框架
大数据协作框架是一个桐城,就是Hadoop2生态系统中几个辅助的Hadoop2.x框架.主要如下: 1,数据转换工具Sqoop 2,文件搜集框架Flume 3,任务调度框架Oozie 4,大数 ...
-
Oozie和Azkaban的技术选型和对比
1 两种调度工具功能对比图 下面的表格对上述2种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在区别 特性 ...
-
大数据入门第十二天——azkaban入门
一.概述 1.azkaban是什么 通过官方文档:https://azkaban.github.io/ Azkaban is a batch workflow job scheduler create ...
-
Azkaban任务流编写
在Azkaban中,一个project包含一个或多个flows,一个flow包含多个job.job是你想在azkaban中运行的一个进程,可以是Command,也可以是一个Hadoop任务.当然,如果 ...
-
Azkaban配置
1,新建azkaban目录,用于安置azkaban程序 2,azkaban web服务器安装 解压 azkaban-web-server-2.5.0.tar.gz tar -zvxf azkaban ...
-
GreenPlum 与hadoop什么关系?(转)
没关系. gp 可以处理大量数据, hadoop 可以处理海量. gp 只能处理湖量,或者河量. 无法处理海量. 作者:SallyLeo链接:https://www.zhihu.com/questio ...
-
深入理解hadoop(三)
Hadoop多用户作业调度器 hadoop 最初是为批处理作业设计的,当时只采用了一个简单的FIFO调度机制分配任务,随着hadoop的普及以及应用的用户越来越多,基于FIFO的单用户调度机制不能很好 ...
随机推荐
-
Npm install failed with “cannot run in wd”
Linux环境下,root账户,安装某些npm包的时候报下面的错误,例如安装grunt-contrib-imagemin时: Error: EACCES, mkdir '/usr/local/lib/ ...
-
lecture15-自动编码器、语义哈希、图像检索
Hinton第15课,本节有课外读物<Semantic Hashing>和<Using Very Deep Autoencoders for Content-Based Image ...
-
Javascript验证手机号码正则表达式
//验证手机正则 var flag = !!phone.match(/^(0|86|17951)?(13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0-9 ...
-
cx_Oracle使用方法一
cx_Oracle使用方法 正确安装好cx_oracle之后,要使用它来连接到oracle数据库进行操作,具体应该分3步走: 第一步:导入cx_Oracle ,建立连接 >>> im ...
-
Codeforces 475 D.CGCDSSQ
题目说了a的范围小于10^9次方,可实际却有超过的数据...真是醉了 算出以f[i]结尾的所有可能GCD值,并统计: f[i]可以由f[i-1]得出. /* 递推算出所有GCD值,map统计 */ # ...
-
unity3d中的http通信 二
转载自 http://www.cnblogs.com/88999660/archive/2013/03/11/2954279.html 如果侵权,请及时通知我删除! using System; usi ...
-
iOS--通过MOB平台实现第三方登录与分享
适合刚开始接触第三方登录与分享的IOS小白!! 这两天看了一下有关IOS第三方登录与分享的一些知识,发现在QQ开放平台与微信开放平台实现这些功能很繁琐,不容易实现,在导师的推荐下,找到了这样一个平台 ...
-
python怎么导入自定义函数
python 编程中经常需要调用自己定义的函数,在大型程序中自定义的函数一般会和main函数分开,这么主要讲下在不同文件下定义的函数怎么调用: 首先在有文件夹test_python文件夹下有main. ...
-
jQuery.TreeView插件实现树状导航(十三)
一:jQuery.TreeView插件简介 该插件的特点: 1.支持静态的树,即一次性将全部数据加载到客户端. 2.支持异步树,即一次只加载一级或若干级节点,子节点可以异步加载数据. 3.支持节点级联 ...
-
【资料收集】QT学习资料
几个专栏 Qt学习之路(3):Hello, world!(续) - 豆子空间 - 51CTO技术博客 http://devbean.blog.51cto.com/448512/194137 Qt 学习 ...