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歲過去了,有點懷念它!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章