工做流調度器

1. 工做流調度系統產生背景html

一個完整的數據分析系統一般都是由大量任務單元組成:java

shell腳本程序,java程序,mapreduce程序、hive腳本等。mysql

各個任務單元之間存在時間前後依賴關係。linux

爲了很好地組織起這樣的複雜執行計劃,須要一個工做流調度系統來調度執行;git

2. 工做流調度實現方式github

簡單的任務調度:web

直接使用linux的crontab來定義,可是缺點也是比較明顯,沒法設置依賴。sql

複雜的任務調度:shell

自主開發調度平臺數據庫

使用開源調度系統,好比azkaban、ooize、Zeus等。

其中知名度比較高的是Apache Oozie,可是其配置工做流的過程是編寫大量的XML配置,並且代碼複雜度比較高,不易於二次開發。

 

3. Azkaban調度器
3.1. Azkaban介紹

Azkaban是由Linkedin公司推出的一個批量工做流任務調度器,用於在一個工做流內以一個特定的順序運行一組工做和流程。Azkaban使用job配置文件創建任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工做流。

Azkaban功能特色:

· 提供功能清晰,簡單易用的Web UI界面

· 提供job配置文件快速創建任務和任務之間的依賴關係

· 提供模塊化和可插拔的插件機制,原生支持command、Java、Hive、Pig、Hadoop

· 基於Java開發,代碼結構清晰,易於二次開發

3.2. Azkaban安裝部署

Azkaban的組成以下:
工做流調度器
mysql服務器:用於存儲項目、日誌或者執行計劃之類的信息

web服務器:使用Jetty對外提供web服務,使用戶能夠經過web頁面方便管理

executor服務器:負責具體的工做流的提交、執行。

Azkaban有兩種部署方式:solo server mode 和 cluster server mode。

· solo server mode(單機模式):該模式中webServer和executorServer運行在同一個進程中,進程名是AzkabanSingleServer。可使用自帶的H2數據庫或者配置mysql數據。該模式適用於小規模的使用。

· cluster server mode(集羣模式):該模式使用MySQL數據庫,webServer和executorServer運行在不一樣進程中,該模式適用於大規模應用。

其實在單機模式中,AzkabanSingleServer進程只是把AzkabanWebServer和AzkabanExecutorServer合到一塊兒啓動而已。

準備工做

Azkaban Web服務器

azkaban-web-server-2.5.0.tar.gz

Azkaban執行服務器

azkaban-executor-server-2.5.0.tar.gz

MySQL

本文檔中默認已安裝好mysql服務器。

下載地址:http://azkaban.github.io/downloads.html

上傳安裝包

將安裝包上傳到集羣,最好上傳到安裝hive、sqoop的機器上,方便命令的執行。

新建azkaban目錄,用於存放azkaban運行程序。

azkaban web服務器安裝

解壓azkaban-web-server-2.5.0.tar.gz

命令: tar –zxvf azkaban-web-server-2.5.0.tar.gz

將解壓後的azkaban-web-server-2.5.0 移動到 azkaban目錄中,並從新命名 webserver

命令: mv azkaban-web-server-2.5.0 ../azkaban

        cd ../azkaban

        mv azkaban-web-server-2.5.0  server

azkaban 執行服器安裝

解壓azkaban-executor-server-2.5.0.tar.gz

命令:tar –zxvf azkaban-executor-server-2.5.0.tar.gz

將解壓後的azkaban-executor-server-2.5.0 移動到 azkaban目錄中,並從新命名 executor

命令:mv azkaban-executor-server-2.5.0  ../azkaban

cd ../azkaban

mv azkaban-executor-server-2.5.0  executor

azkaban腳本導入

解壓: azkaban-sql-script-2.5.0.tar.gz

命令:tar –zxvf azkaban-sql-script-2.5.0.tar.gz

將解壓後的mysql 腳本,導入到mysql中:

進入mysql

mysql> create database azkaban;

mysql> use azkaban;

Database changed

mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;

建立SSL配置(https)

命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA

運行此命令後,會提示輸入當前生成 keystor的密碼及相應信息,輸入的密碼請勞記,信息以下:

輸入keystore密碼:

再次輸入新密碼:

您的名字與姓氏是什麼?

  [Unknown]:

您的組織單位名稱是什麼?

  [Unknown]:

您的組織名稱是什麼?

  [Unknown]:

您所在的城市或區域名稱是什麼?

  [Unknown]:

您所在的州或省份名稱是什麼?

  [Unknown]:

該單位的兩字母國家代碼是什麼

  [Unknown]:  CN

CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎?

  [否]:  y

輸入<jetty>的主密碼

        (若是和 keystore 密碼相同,按回車):

再次輸入新密碼:

完成上述工做後,將在當前目錄生成 keystore證書文件,將keystore拷貝到 azkaban web服務器根目錄中.如:cp keystore azkaban/webserver

配置文件

注:先配置好服務器節點上的時區

先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 便可

拷貝該時區文件,覆蓋系統本地時區配置

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  

Ø azkaban web服務器配置

進入azkaban web服務器安裝目錄 conf目錄

修改azkaban.properties文件
#Azkaban Personalization Settings

azkaban.name=Test                           #服務器UI名稱,用於服務器上方顯示的名字

azkaban.label=My Local Azkaban                               #描述

azkaban.color=#FF3601                                                 #UI顏色

azkaban.default.servlet.path=/index                         #

web.resource.dir=web/                                                 #默認根web目錄

default.timezone.id=Asia/Shanghai                           #默認時區,已改成亞洲/上海 默認爲美國

#Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager   #用戶權限管理默認類

user.manager.xml.file=conf/azkaban-users.xml              #用戶配置,具體配置參加下文

#Loader for projects

executor.global.properties=conf/global.properties    # global配置文件所在位置

azkaban.project.dir=projects                                                #

database.type=mysql                                                              #數據庫類型

mysql.port=3306                                                                       #端口號

mysql.host=hadoop03                                                      #數據庫鏈接IP

mysql.database=azkaban                                                       #數據庫實例名

mysql.user=root                                                                 #數據庫用戶名

mysql.password=root                                                          #數據庫密碼

mysql.numconnections=100                                                  #最大鏈接數

Velocity dev mode

velocity.dev.mode=false

Jetty服務器屬性.

jetty.maxThreads=25                                                               #最大線程數

jetty.ssl.port=8443                                                                   #Jetty SSL端口

jetty.port=8081                                                                         #Jetty端口

jetty.keystore=keystore                                                          #SSL文件名

jetty.password=123456                                                             #SSL文件密碼

jetty.keypassword=123456                                                      #Jetty主密碼 與 keystore文件相同

jetty.truststore=keystore                                                                #SSL文件名

jetty.trustpassword=123456                                                   # SSL文件密碼

執行服務器屬性

executor.port=12321                                                               #執行服務器端口

郵件設置

mail.sender=xxxxxxxx@163.com                                       #發送郵箱

mail.host=smtp.163.com                                                       #發送郵箱smtp地址

mail.user=xxxxxxxx                                       #發送郵件時顯示的名稱

mail.password=**                                                 #郵箱密碼

job.failure.email=xxxxxxxx@163.com                              #任務失敗時發送郵件的地址

job.success.email=xxxxxxxx@163.com                            #任務成功時發送郵件的地址

lockdown.create.projects=false                                           #

cache.directory=cache                                                            #緩存目錄
Ø azkaban 執行服務器配置

進入執行服務器安裝目錄conf,修改azkaban.properties

vi azkaban.properties
#Azkaban

default.timezone.id=Asia/Shanghai                                              #時區

Azkaban JobTypes 插件配置

azkaban.jobtype.plugin.dir=plugins/jobtypes                   #jobtype 插件所在位置

#Loader for projects

executor.global.properties=conf/global.properties

azkaban.project.dir=projects

#數據庫設置

database.type=mysql                                                                       #數據庫類型(目前只支持mysql)

mysql.port=3306                                                                                #數據庫端口號

mysql.host=192.168.20.200                                                           #數據庫IP地址

mysql.database=azkaban                                                                #數據庫實例名

mysql.user=azkaban                                                                         #數據庫用戶名

mysql.password=oracle                                                                   #數據庫密碼

mysql.numconnections=100                                                           #最大鏈接數

執行服務器配置

executor.maxThreads=50                                                                #最大線程數

executor.port=12321                                                               #端口號(如修改,請與web服務中一致)

executor.flow.threads=30                                                                #線程數
Ø 用戶配置

進入azkaban web服務器conf目錄,修改azkaban-users.xml

vi azkaban-users.xml 增長 管理員用戶
<azkaban-users>

        <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />

        <user username="metrics" password="metrics" roles="metrics"/>

        <user username="admin" password="admin" roles="admin,metrics" />

        <role name="admin" permissions="ADMIN" />

        <role name="metrics" permissions="METRICS"/>

</azkaban-users>
啓動

web服務器

在azkaban web服務器目錄下執行啓動命令

bin/azkaban-web-start.sh

注:在web服務器根目錄運行

執行服務器

在執行服務器目錄下執行啓動命令

bin/azkaban-executor-start.sh ./

注:只能要執行服務器根目錄運行

啓動完成後,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://服務器IP地址:8443 ,便可訪問azkaban服務了.在登陸中輸入剛纔新的戶用名及密碼,點擊login.

 

3.3. Azkaban實戰

Command類型單一job示例

Ø 建立job描述文件

vi command.job

#command.job

type=command                                                   

command=echo 'hello'

Ø 將job資源文件打包成zip文件

zip command.job

Ø 經過azkaban的web管理平臺建立project並上傳job壓縮包

首先建立Project
工做流調度器
上傳zip包
工做流調度器
Ø 啓動執行該job
工做流調度器
Command類型多job工做流flow

Ø 建立有依賴關係的多個job描述

第一個job:foo.job

foo.job

type=command

command=echo foo

第二個job:bar.job依賴foo.job

bar.job

type=command

dependencies=foo

command=echo bar

Ø 將全部job資源文件打到一個zip包中
————————————————
工做流調度器
Ø 在azkaban的web管理界面建立工程並上傳zip包

Ø 啓動工做流flow

HDFS操做任務

Ø 建立job描述文件

fs.job

type=command

command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz

Ø 將job資源文件打包成zip文件
工做流調度器
Ø 經過azkaban的web管理平臺建立project並上傳job壓縮包

Ø 啓動執行該job

MAPREDUCE任務

mr任務依然可使用command的job類型來執行

Ø 建立job描述文件,及mr程序jar包(示例中直接使用hadoop自帶的example jar)

mrwc.job

type=command

command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop  jar hadoop-mapreduce-examples-2.6.1.jar wordcount /wordcount/input /wordcount/azout

Ø 將全部job資源文件打到一個zip包中
工做流調度器
Ø 在azkaban的web管理界面建立工程並上傳zip包

Ø 啓動job

HIVE腳本任務

Ø 建立job描述文件和hive腳本

Hive腳本: test.sql

use default;

drop table aztest;

create table aztest(id int,name string) row format delimited fields terminated by ',';

load data inpath '/aztest/hiveinput' into table aztest;

create table azres as select * from aztest;

insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;

Job描述文件:hivef.job

hivef.job

type=command

command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'

Ø 將全部job資源文件打到一個zip包中建立工程並上傳zip包,啓動job

相關文章
相關標籤/搜索