利用Azkaban来完成大数据的任务调度

Azkaban简介

Azkaban是一款有LinkedIn开源的任务调度系统,使用该系统可以完成任务的定时调度,执行,任务分片等操作。
官方是这么介绍的:

zkaban was implemented at LinkedIn to solve the problem of Hadoop job dependencies.We had jobs that needed to run in order, from ETL jobs to data analytics products.
Initially a single server solution, with the increased number of Hadoop users over the years, Azkaban has evolved to be a more robust solution.

azkaban在linkedIn内部经常被用来作ETL和大数据分析相关的任务调度。
相对于我们比较熟悉的crontab命令,azkaban可以认为是一种更高级的,能够支持任务的分片与自动执行,同时封装有基于jetty的web ui的这么一款专业的任务调度系统。于此同时,国内也有比较著名的当当网开源的一款任务调度系统,elasticjob.
不过,相对于azkaban,笔者更喜欢使用azkaban,因为其web ui界面更加直观,能够看到不同的job之间的依赖关系,同这这个任务调度系统也更轻量化。

Azkaban的架构

azkaban使用java开发,封装了jetty作为轻量的web服务器,使用web ui来操控,web ui能够直观地看到不同的任务之间的依赖关系,azkaban可以单点部署,也可以双机部署,对于一般的情况,单点部署就足够了。
他的架构示意图官方是这么给出的:


image.png

官方是这么介绍的:

Azkaban consists of 3 key components:
Relational Database (MySQL)
AzkabanWebServer
AzkabanExecutorServer

在我们很多工程情况下,webserver 就是 executor server,这样就是单点部署,同时,需要我们安装mysql作为持久化的数据库。

Azkaban做什么?

我们用azkaban主要解决的业务场景是:

  1. 对日志等原始数据进行ETL
  2. 将ETL后的数据存储起来,可以是mongodb,也可以是hbase等
  3. 对数据进行分析
  4. 任务完成或失败通知管理员

这样,我们就可以利用azkaban来进行任务调度,主要应用场景就是离线计算了。
在上面,我们已经知道了,大数据离线计算相关内容是存在一种依赖关系的,最简单的例子是先要ETL,然后才能进行分析。
Azkaban可以在我们睡觉的时候,帮我们完成日志的ETL和自动分析任务的创建和监控,无人值守,方便轻松。

Azkaban安装

mysql

首先得安装Mysql,然后配置mysql,下面按照官方的步骤,进行修改如下:
首先登录到mysql shell,然后输入密码:

mysql -uroot -p

Create a database for Azkaban. For example:

创建数据库,名为azkaban

mysql> CREATE DATABASE azkaban;

Create a database user for Azkaban. For example:

Example database creation command. The user name doesn’t need to be ‘azkaban’
创建用户名和密码

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
例如:
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';

Set user permissions on the database.

Create a user for Azkaban if one hasn’t been made, and give the user INSERT, SELECT, UPDATE, DELETE permission on all tables in the Azkaban db.
Replace db, username with the ones created by the previous steps.
设置权限

mysql> GRANT all ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
例如:
GRANT all ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

Configure Packet Size may need to be configured.

MySQL may have, by default, a ridiculously low allowable packet size. To increase it, you’ll need to have the property max_allowed_packet set to something higher, say 1024M.
To configure this in linux, open /etc/my.cnf. Somewhere after mysqld, add the following:
配置/etc/my.cnf 文件的参数:

[mysqld]
...
max_allowed_packet=1024M

To restart MySQL, you can run…

重启服务,配置生效

$ sudo /sbin/service mysqld restart

azkaban安装

在git上clone一个:

git clone https://github.com/azkaban/azkaban.git

gradle 编译

这里说明以下,因为azkaban可能会用到node.js的npm,所以如果失败的话可以安装下node.js,由于我的server安装过node.js环境,我不知道不安装是否会失败。

  # Build Azkaban
  ./gradlew build

  # Build and install distributions
  ./gradlew installDist

进入到编译后的文件夹

在azkaban源代码的根目录下,注意我说的是源代码的根目录下,这个文件路径有点儿恶心,别找错了:

cd ./azkaban-solo-server/build/install/azkaban-solo-server

之后这个路径我们就是我们相对路径的参考路径了,下面称之为 azkaban-solo-server 目录,切记!

这个文件路径是单机部署编译出来的,从solo这个单词也能看出来,我们执行节点和web server节点都是同一个,对于很多情况,这种就足够了。

配置azkaban

在这个 azkaban-solo-server 目录下,找到conf目录,cd进去,修改几个文件:

azkaban.properties加入以下内容
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

这个是Mysql的配置信息,根据自己的情况修改

azkaban-users.xml

这个里面是WEB UI默认登录的用户名和密码,看情况改,easy!
默认的用户名和密码都是azkaban

还有一个很重要的文件也要修改!

azkaban-solo-server目录下,修改相对路径这个配置文件

vi ./plugins/jobtypes/commonprivate.properties 

加入:

memCheck.enabled=false

因为:
azkaban默认要求机器是3G及以上的,我们很多情况的vps都达不到这个水平,我们必须修改这个配置,否则任务将一直为running状态!

azkaban运行

在在azkaban-solo-server目录下,运行:

./bin/azkaban-solo-start.sh 

注意:
一定要在这个路径下运行,因为这个shell中很多用的都是相对路径,如果不在这个路径下运行,mysql数据库会初始化失败的喔~

之所以没用nohup运行,是为了看看是不是会报错,如果有报错,后续根据异常情况好方便排查!
如果要关闭任务,也运行:

./bin/azkaban-solo-shutdown.sh 

任务提交

web ui的默认端口号是8081,通过这个端口号访问web ui.
登录到web ui之后,会有任务创建,这个倒是没什么,就是后面要求Upload一个任务,这里注意下:

upload的文件是zip压缩的压缩包,在压缩包中可以包含多个任务,表示任务文件的扩展名是.job
然后,多个job文件打包在一起,这些job文件的格式是:

eg. demo.job

type=command
#用command来执行shell脚本,这个脚本放到压缩包里打包,注意路径
command=sh /job/analysis.sh
dependencies=etl

etl.job

type=command
#这个command当然也可以是python脚本啦
command=python /root/demo/etl.py
#这里也可以是任务执行机器的绝对路径
#无依赖

然后,把上面需要的job文件,sh文件等等打成一个zip压缩包,上传,即可看到生成一个DAG,这个DAG就是我们要调度的任务.
web ui一共也没几个按钮,就那么些功能,剩下的随便点点就知道都怎么用了~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容