Azkaban-任务调度管理器

Azkaban据说是哈利波特系列故事中的一座监狱的名字,卧槽,搜索这个词多数也都是哈利波特相关的网页,真是恼火!能搜到的azkaban的项目主页在:http://azkaban.github.io/azkaban2/,这里介绍得还是比较详细的,源码地址https://github.com/azkaban,项目主页提供的下载链接http://azkaban.github.io/azkaban2/downloads.html,但是你如果下载这的2.1版本的tar包,很坑爹的,部署的过程中会遇到很多问题。官方文档看个遍,很多坑和很多细节介绍得并不全面,因为版本之间细节修订比较多,所以这里补充记录一下切实可行的部署安装流程。
azkaban如github上所见,有两个版本,1.x和2.x,1.x试验了一把,可以安装,而且不需要mysql,独立部署启动就行了,还挺好用,但是貌似没有用户认证或者增加额外插件的功能。但是对于一般的应用,dag类型的作业或者其他简单地定时任务,1.0版本还是不错的。
项目主页重点介绍的是2.x版本的azkaban,但是基本上,项目介绍和实际的部署包并不完全一致,也搞不清楚介绍的到底是2.0还是2.1,卧槽,你去githup上进去看,要注意选择的是release-2.1还是branch-3 & master,因为这两个版本还是有很多不同,branch-3 & master其实是2.2版本,关于2.2项目主页并未更新提及。
2.1不是不能安装,但是它的确问题不少,比如坑爹的启动脚本,以及zip工作流压缩包不能识别等,另外,executor启动的时候依赖插件,报错,这些东西实在让人恼火。幸运的是这些很傻逼的细节,对比了一下,在2.2都得到了修复。
但是项目主页并不提供现成的项目包给你下载,所以我们必须要亲自ant编译打包,之前没用过ant,以为很吊,其实巨简单,因为build.xml都给你写好了,你只要安装ant,执行ant就行了。下面就详细记录一下,ankaban2.2的安装流程。
一、mysql的安装。
这个网上资料一大堆,但是个人比较喜欢用二进制安装包,简单说下吧:
下载安装包解压,进入安装目录cd mysql,拷贝主配置文件cp support-files/my-default.cnf /etc/my.cnf ;初始化数据库./scripts/mysql_install_db 
由于二进制包是编译者编译之后打包成的,所以安装目录中的有些文件属主和属组都很陌生,这时候需要 
将文件属组和属主改变,chown -R root ./ 
 chown -R mysql data/ 
chgrp -R mysql ./
即将所有文件都改成mysql组,除了data目录(用于存放mysql数据库数据) 
改成mysql外,其余属主都改成root,特别提醒注意的是数据库初始化要在这之前做,否者有可能导致某些文件属组或属主错误,从而无法正常使用mysql。 
启动mysql /usr/local/mysql/bin/mysqld_safe --user=mysql & 正常情况下netstat -ntl可以查看到3306端口起来了。 
直接输入bin/mysql就可以以root身份登陆,现在给root添加登陆密码。使用mysqladmin 配置登陆用户和口令bin/mysqladmin -u root password '123', 
然后使用root登陆bin/mysql -u root -p之后输入密码123即可。直接输入bin/mysql将禁止登陆。 
这时候你可以按照http://azkaban.github.io/azkaban2/documents/2.1/database.html,介绍的创建数据库,以及给数据库添加用户,授权等等,这些东西呢,我擦,老是搞不定,干脆,就用尼玛root用户吧,自己部门用,自己搭的数据库,给root吧,能有多大事,擦!create database azkaban,先建一个叫azkaban的数据库吧,名字任意。
二、SSL keystone创建
azkaban本身有内置jetty web服务器,说实话如果公司不大,用得人也有限,弄不弄ssl都行,这个在azkaban里也是可以选的,可以不用。但是既然咱也没用过,学习一下吧。还是看项目主页,它给你一个链接告诉你上那学去怎么弄,我擦,就是这里哈http://docs.codehaus.org/display/JETTY/How+to+configure+SSL,上面很多个step,看着挺晕,直接说吧,我等屌丝该怎么办:
1、执行 keytool -keystore keystore -alias jetty -genkey -keyalg RSA
注意,-keystore后面的keystore,这个名字你任起,这个东西就是一会在本地目录生成的目标文件,简单点就是希望生成的这个文件放哪。必须是文件,不能是目录,可以是/home/username/mykeystore这样的。
keytool呢,就是个jdk自带的工具,就是说你下载的jdk1.6.x/这样的包bin目录里的,跟java,javac,jstack,jmap放一块的,你平时有可能没注意到它。这个执行的时候有交互式命令行,叫你输入密码,你的公司啊,地址啊,乱七八糟的,不用管,不想输入的就不要输入,密码得输入。这样就能生成一个文件了。比如上面,就是在当前目录产生一个keystore文件,你执行file keystone,看一下,文件类型就是keystore。
2、生成keystore之后,http://docs.codehaus.org/display/JETTY/How+to+configure+SSL上面说可以用了,但还不够安全,我擦,继续:
再执行 keytool -certreq -alias jetty -keystore keystore -file jetty.csr,这个keystore要跟你刚才生成的对应,这一步产生文件
jetty.csr
到这里就算完成了。
三、编译Azkaban2.2
到https://github.com/azkaban/azkaban2选择branch-3版本,注意别选错了,点进去的应该就是,然后根据你的情况选择合适的方式下载,我直接下载zip格式的源码,方便。
下载完了放到服务器的路径下,unzip解压。
编译要用到ant,这个东西呢,你直接从apache官网下载http://ant.apache.org/bindownload.cgi,64位服务器运行没问题,apache-ant-1.9.3-bin.tar.gz [PGP] [SHA1] [SHA512] [MD5]。下载解压,添加环境变量,直接添加bin目录到PATH就行了。这个没有jdk的classpath那一套。
cd azkaban2-master/,这时候需要修改build.xml文件,默认的target是all,但是all呢:
<target name="all" depends="clean, jars" description="Builds all jars" />
看到没有只去清理,和打jar包,确实给你编译了,但是没有角色包,你不好安装啊。因为azkaban分为webServer和executorServer,需要分别部署。
所以你看一下,我擦,
<target name="package-all" depends="package-exec-server, package-web-server, package-solo-server, package-sql-scripts" description="Create all packages">,所以你把build.xml开头的
<project name="azkaban" basedir="." default="all">
改成<project name="azkaban" basedir="." default="package-all">就行了,然后执行ant,这样就会在dist/packages/目录下找到你想要的包。项目主页没告诉大家要改什么东西,直接执行ant -package-all,这样的命令我擦不能执行,坑爹啊。
四、建表
建表呢,就是要在刚才搭好的mysql中建,azkaban提供了sql文件告诉你怎么建表:
刚才不是执行了ant编译并且打好包了,你去dist/packages/sql,能找到create-all-sql-2.2.sql ,里边都是建表指令。
切换到mysql用户,执行./mysql/bin/mysql -u root -p azkaban <create-all-sql-2.2.sql,注意绿色的是数据库的名字,不是root用户的密码,回车之后,输入root密码,2秒左右表就建好了。你登陆mysql客户端看一眼确认一下。
五、修改webServer和executorServer配置,然后启动
http://azkaban.github.io/azkaban2/documents/2.1/gettingstarted.html按照项目主页介绍的配置就好了。都是修改azkaban.properties。
启动的时候比较坑爹,不要进到bin目录下启动,在bin目录外边,执行./bin/start-web.sh,或者./bin/start-exec.sh
基本上如果jetty.use.ssl参数你没给它false,就采用ssl的访问方式,弄个浏览器,输入https://hostname:8443你就能看到webServer的页面了。
注意是ssl是https协议,不是http,这个东西一开始也让我头疼了一会子,其实这里http://docs.codehaus.org/display/JETTY/How+to+configure+SSL已经告诉你别忘了用https。
这样简单地不带插件的azkaban就搭建起来了。你可以提交一个工作流,按照项目主页的配置方式,upload项目文件(里边基本上都是.job文件,依赖关系写.job文件里边,然后打成zip包,zip包名任取,但是里边没有被依赖的job名就成了flow名)2.2版本上传.zip文件没有问题,正常给你解析。2.1就没法上传了,因为你看里边的代码,后台代码并不识别,ProjectManagerServlet的ajaxHandleUpload方法中,application/octet-stream文件类型是被识别为zip的。

if (contentType != null
                && (contentType.startsWith("application/zip")
                    || contentType.startsWith("application/x-zip-compressed")
                    || contentType.startsWith("application/octet-stream"))) {
				type = "zip";
			}

但是2.1版本是这样的:

if(contentType != null && (contentType.startsWith("application/zip") || 
contentType.startsWith("application/x-zip-compressed"))) {
                                type = "zip";
                        }

所以怎么也传不上去zip文件,不知道为啥windows客户端zip给解析成application/octet-stream文件类型,也不知道这是个啥类型,我擦。2.1还有个特别不好的是,日志满天飞,打到脸上,我日,2.2其实也不太好,有时候感觉也是打到脸上!但是不管怎样,2.2还是不错吧,比较规范了吧。

代码看了一部分,写得还是挺不错的,值得借鉴学习,azkaban既然叫hadoop任务调度器,那怎么执行mr作业或者hive作业的呢,这个跟插件有关,后面再继续介绍吧。
今天是2013年最后一天,27岁过去了,有点怀念它!


你可能感兴趣的:(Azkaban-任务调度管理器)