工作流調度器azkaban(以及各種工作流調度器比對)


1:工作流調度系統的作用:

(1):一個完整的數據分析系統通常都是由大量任務單元組成:比如,shell腳本程序,java程序,mapreduce程序、hive腳本等;
(2):各任務單元之間存在時間先后及前后依賴關系;
(3):為了很好地組織起這樣的復雜執行計划,需要一個工作流調度系統來調度執行;

(4):舉例說明工作流調度系統的具體作用:

  我們可能有這樣一個需求,某個業務系統每天產生20G原始數據,我們每天都要對其進行處理,處理步驟如下所示:
    a、通過Hadoop先將原始數據同步到HDFS上;
    b、借助MapReduce計算框架對原始數據進行轉換,生成的數據以分區表的形式存儲到多張Hive表中;
    c、需要對Hive中多個表的數據進行JOIN處理,得到一個明細數據Hive大表;
    d、將明細數據進行復雜的統計分析,得到結果報表信息;
    e、需要將統計分析得到的結果數據同步到業務系統中,供業務調用使用。

(5):工作流調度實現方式:

  a:簡單的任務調度:直接使用linux的crontab來定義;
  b:復雜的任務調度:開發調度平台,或使用現成的開源調度系統,比如ooize、azkaban等

(6):常見工作流調度系統:

  市面上目前有許多工作流調度器:
    在hadoop領域,常見的工作流調度器有Oozie, Azkaban,Cascading,Hamake等

 2:各種調度工具特性對比:

  下面的表格對上述四種hadoop工作流調度器的關鍵特性進行了比較,盡管這些工作流調度器能夠解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面還是存在顯著的區別,在做技術選型的時候,可以提供參考:

特性

Hamake Oozie Azkaban Cascading
 工作流描述語言  XML  XML (xPDL based)  text file with key/value pairs  Java API
 依賴機制  data-driven  explicit  explicit  explicit
 是否要web容器  No  Yes  Yes  No
 進度跟蹤  console/log messages  web page  web page  Java API
 Hadoop job調度支持  no  yes  yes  yes
 運行模式  command line utility  daemon  daemon  API
 Pig支持  yes  yes  yes  yes
 事件通知  no  no  no  yes
 需要安裝  no  yes  yes  no
 支持的hadoop版本  0.18+  0.20+  currently unknown  0.18+
 重試支持  no  workflownode evel  yes  yes
 運行任意命令  yes  yes  yes  yes
 Amazon EMR支持  yes  no  currently unknown  yes

 3:Azkaban與Oozie對比:

(1):對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。

(2):功能:
  兩者均可以調度mapreduce,pig,java,腳本工作流任務
  兩者均可以定時執行工作流任務

(3):工作流定義
  Azkaban使用Properties文件定義工作流
  Oozie使用XML文件定義工作流

(4):工作流傳參
  Azkaban支持直接傳參,例如${input}
  Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)}

(5):定時執行
  Azkaban的定時執行任務是基於時間的
  Oozie的定時執行任務基於時間和輸入數據

(6):資源管理
  Azkaban有較嚴格的權限控制,如用戶對工作流進行讀/寫/執行等操作
  Oozie暫無嚴格的權限控制

(7):工作流執行
  Azkaban有兩種運行模式,分別是solo server mode(executor server和web server部署在同一台節點)和multi server mode(executor server和web server可以部署在不同節點)
  Oozie作為工作流服務器運行,支持多用戶和多工作流

(8):工作流管理
  Azkaban支持瀏覽器以及ajax方式操作工作流
  Oozie支持命令行、HTTP REST、Java API、瀏覽器操作工作流;

 4:Azkaban介紹:

  Azkaban是由Linkedin開源的一個批量工作流任務調度器。用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。
  它有如下功能特點:
     Web用戶界面,方便上傳工作流,方便設置任務之間的關系,調度工作流,認證/授權(權限的工作),能夠殺死並重新啟動工作流,模塊化和可插拔的插件機制,項目工作區,工作流和任務的日志記錄和審計。

5:Azkaban安裝部署:

   (1) 請提前將,Azkaban Web服務器,azkaban-web-server-2.5.0.tar.gz;Azkaban執行服務器 ,azkaban-executor-server-2.5.0.tar.gz上傳到自己的機器,過程省略。由於目前azkaban只支持 mysql(azkaban提交的任務提交到mysql里面,因為是提交的任務是定時執行的,具有時間調度的,azkaban重啟以后任務還存在),需安裝mysql服務器,之前寫過安裝linux下面安裝mysql,這里不敘述:

 Azkaban的下載官網網址:https://azkaban.github.io/downloads.html

   (2)安裝建議:將安裝文件上傳到集群,最好上傳到安裝 hive、sqoop的機器上,方便命令的執行,在當前用戶目錄下新建 azkabantools目錄,用於存放源安裝文件.新建azkaban目錄,用於存放azkaban運行程序;

   (3)azkaban web服務器安裝(提供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 執行服器(調用job執行的)安裝:

      第一步:解壓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 在mysql里面創建表具有表結構,不像hive會自動執行創建mysql表結構,所以azkaban 需要手動執行azkaban腳本導入,創建mysql的表結構。
      第一步:解壓: 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;


具體安裝過程如下所示:

 1 <!--創建文件夾相應的文件夾-->
 2 [root@master hadoop]# mkdir azkabantools
 3 [root@master hadoop]# mkdir azkaban
 4 [root@master hadoop]# cd package/
 5 
 6 <!--解壓縮的操作-->
 7 [root@master package]# tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /home/hadoop/azkabantools/
 8 [root@master package]# ll /home/hadoop/azkabantools/
 9 [root@master package]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /home/hadoop/azkabantools/
10 [root@master package]# ll /home/hadoop/azkabantools/
11 [root@master package]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /home/hadoop/azkabantools/
12 [root@master package]# ll /home/hadoop/azkabantools/
13 [root@master package]# cd /home/hadoop/azkabantools/
14 [root@master azkabantools]# ls
15 [root@master azkabantools]# ll
16 
17 <!--修改azkaban的名稱以及查看等等操作-->
18 [root@master azkabantools]# mv azkaban-web-2.5.0 server
19 [root@master azkabantools]# mv azkaban-executor-2.5.0 executor
20 [root@master azkabantools]# ll
21 
22 <!--手動執行mysql腳本創建數據表-->
23 [root@master hadoop]# mysql -uroot -p123456
24 mysql> create database azkaban;
25 mysql> use azkaban;
26 mysql> source /home/hadoop/azkabantools/azkaban-2.5.0/create-all-sql-2.5.0.sql

 6:完成以上操作以后,開始配置配置文件,因為azkaban的web頁面是https訪問的,所以服務端需要一個證書的。所以使用SSL來生成這個證書,下面創建SSL的配置:

 腦補一下:安裝java,安裝目錄下就有keytool,如果輸入的時候輸錯了,不要慌,按住ctrl+Backspace鍵即可清楚錯誤操作命令。

此命令生成證書:keytool -keystore keystore -alias jetty -genkey -keyalg RSA
 1 [root@master azkabantools]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
 2 Enter keystore password:輸入密碼  
 3 Re-enter new password:輸入確認密碼 
 4 What is your first and last name?
 5   [Unknown]:回車  
 6 What is the name of your organizational unit?
 7   [Unknown]:回車  8 What is the name of your organization?
 9   [Unknown]:回車  
10 What is the name of your City or Locality?
11   [Unknown]:回車  
12 What is the name of your State or Province?
13   [Unknown]:回車  
14 What is the two-letter country code for this unit?
15   [Unknown]:  CN 16 Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN correct?
17   [no]:  y 18 
19 Enter key password for <jetty>
20     (RETURN if same as keystore password):回車(密碼是否和上面的一樣)  
21 [root@master azkabantools]# 

 完成上述工作后,將在當前目錄生成 keystore 證書文件,將keystore 考貝到 azkaban web服務器根目錄中.如:cp keystore azkaban/server,即完成生成證書操作;

 [root@master azkabantools]# cp keystore /home/hadoop/azkabantools/server/

 7:接下來配置azkaban的配置文件:

 注:先配置好服務器節點上的時區,由於是定時執行的,如果時區時間不對,azkaban將不會執行。
  1、先生成時區配置文件Asia/Shanghai,如果沒有這個時區Asia/Shanghai,使用交互式命令 tzselect生成 即可,根據提示進行選擇,這里省略。
  2、拷貝該時區文件,覆蓋系統本地時區配置:
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

   3:修改自己的時間,然后寫到硬件里面,不然只在本次生效:

    sudo date -s 'yyyy-dd-MM hh:mm:ss'
    hwclock -w  

 azkaban web服務器配置,進入azkaban web服務器安裝目錄 conf目錄,修改azkaban.properties文件:

[root@master azkabantools]# cd server/conf

[root@master conf]# vim azkaban.properties

 1 #Azkaban Personalization Settings
 2 azkaban.name=Test                           #服務器UI名稱,用於服務器上方顯示的名字
 3 azkaban.label=My Local Azkaban                               #描述
 4 azkaban.color=#FF3601                                                 #UI顏色
 5 azkaban.default.servlet.path=/index                         #
 6 web.resource.dir=web/                                                 #默認根web目錄
 7 default.timezone.id=Asia/Shanghai                           #默認時區,已改為亞洲/上海 默認為美國
 8  
 9 #Azkaban UserManager class
10 user.manager.class=azkaban.user.XmlUserManager   #用戶權限管理默認類
11 user.manager.xml.file=conf/azkaban-users.xml              #用戶配置,具體配置參加下文
12  
13 #Loader for projects
14 executor.global.properties=conf/global.properties    # global配置文件所在位置
15 azkaban.project.dir=projects                                                #
16  
17 database.type=mysql                                                              #數據庫類型
18 mysql.port=3306                                                                       #端口號
19 mysql.host=192.168.3.129                                                      #數據庫連接IP
20 mysql.database=azkaban                                                       #數據庫實例名
21 mysql.user=root                                                                 #數據庫用戶名
22 mysql.password=123456                                                         #數據庫密碼
23 mysql.numconnections=100                                                  #最大連接數
24  
25 # Velocity dev mode
26 velocity.dev.mode=false
27 # Jetty服務器屬性.
28 jetty.maxThreads=25                                                               #最大線程數
29 jetty.ssl.port=8443                                                                   #Jetty SSL端口
30 jetty.port=8081                                                                         #Jetty端口
31 jetty.keystore=keystore                                                          #SSL文件名
32 jetty.password=123456                                                             #SSL文件密碼
33 jetty.keypassword=123456                                                      #Jetty主密碼 與 keystore文件相同
34 jetty.truststore=keystore                                                                #SSL文件名
35 jetty.trustpassword=123456                                                   # SSL文件密碼
36  
37 # 執行服務器屬性
38 executor.port=12321                                                               #執行服務器端口
39  
40 # 郵件設置
41 mail.sender=xxxxxxxx@163.com                                       #發送郵箱
42 mail.host=smtp.163.com                                                       #發送郵箱smtp地址
43 mail.user=xxxxxxxx                                       #發送郵件時顯示的名稱
44 mail.password=**********                                                 #郵箱密碼
45 job.failure.email=xxxxxxxx@163.com                              #任務失敗時發送郵件的地址
46 job.success.email=xxxxxxxx@163.com                            #任務成功時發送郵件的地址
47 lockdown.create.projects=false                                           #
48 cache.directory=cache                                                            #緩存目錄

 然后配置azkaban 執行服務器executor配置,進入執行服務器安裝目錄conf,修改azkaban.properties:

 1 #Azkaban
 2 default.timezone.id=Asia/Shanghai                                              #時區
 3  
 4 # Azkaban JobTypes 插件配置
 5 azkaban.jobtype.plugin.dir=plugins/jobtypes                   #jobtype 插件所在位置
 6  
 7 #Loader for projects
 8 executor.global.properties=conf/global.properties
 9 azkaban.project.dir=projects
10  
11 #數據庫設置
12 database.type=mysql                                                                       #數據庫類型(目前只支持mysql)
13 mysql.port=3306                                                                                #數據庫端口號
14 mysql.host=192.168.3.129                                                           #數據庫IP地址
15 mysql.database=azkaban                                                                #數據庫實例名
16 mysql.user=root                                                                       #數據庫用戶名
17 mysql.password=123456                                  #數據庫密碼
18 mysql.numconnections=100                                                           #最大連接數
19  
20 # 執行服務器配置
21 executor.maxThreads=50                                                                #最大線程數
22 executor.port=12321                                                               #端口號(如修改,請與web服務中一致)
23 executor.flow.threads=30                                                                #線程數

然后進行用戶配置,進入azkaban web服務器conf目錄,修改azkaban-users.xml,vi azkaban-users.xml 增加 管理員用戶:

[root@master conf]# vim /home/hadoop/azkabantools/server/conf/azkaban-users.xml

1 <azkaban-users>
2         <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
3         <user username="metrics" password="metrics" roles="metrics"/>
4         <user username="admin" password="admin" roles="admin,metrics" />
5         <role name="admin" permissions="ADMIN" />
6         <role name="metrics" permissions="METRICS"/>
7 </azkaban-users>

 8:配置完成以后可以啟動azkaban,可以先啟動azkaban web服務器:

在azkaban web服務器目錄下執行啟動命令:bin/azkaban-web-start.sh

在azkaban web服務器目錄下執行關閉命令:[root@master server]# bin/azkaban-web-shutdown.sh

  注意:在web服務器根目錄運行或者啟動到后台運行:
        nohup  bin/azkaban-web-start.sh  1>/tmp/azstd.out  2>/tmp/azerr.out &

 

 然后就報下面的錯,出錯了,就解決唄,錯誤和解決方法如下所示:

1 [root@master server]# bin/azkaban-web-start.sh 
2 Using Hadoop from /home/hadoop/hadoop-2.4.1
3 Using Hive from 
4 bin/..
5 :bin/../lib/azkaban-2.5.0.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib/commons-configuration-1.8.jar:bin/../lib/commons-dbcp-1.4.jar:bin/../lib/commons-dbutils-1.5.jar:bin/../lib/commons-email-1.2.jar:bin/../lib/commons-fileupload-1.2.1.jar:bin/../lib/commons-io-2.4.jar:bin/../lib/commons-jexl-2.1.1.jar:bin/../lib/commons-lang-2.6.jar:bin/../lib/commons-logging-1.1.1.jar:bin/../lib/commons-pool-1.6.jar:bin/../lib/guava-13.0.1.jar:bin/../lib/h2-1.3.170.jar:bin/../lib/httpclient-4.2.1.jar:bin/../lib/httpcore-4.2.1.jar:bin/../lib/jackson-core-asl-1.9.5.jar:bin/../lib/jackson-mapper-asl-1.9.5.jar:bin/../lib/jetty-6.1.26.jar:bin/../lib/jetty-util-6.1.26.jar:bin/../lib/joda-time-2.0.jar:bin/../lib/jopt-simple-4.3.jar:bin/../lib/junit-4.8.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/mail-1.4.5.jar:bin/../lib/mysql-connector-java-5.1.28.jar:bin/../lib/servlet-api-2.5.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.4.jar:bin/../lib/velocity-1.7.jar:bin/../lib/velocity-tools-2.0.jar:bin/../extlib/*.jar:bin/../plugins/*/*.jar:/home/hadoop/hadoop-2.4.1/conf:/home/hadoop/hadoop-2.4.1/*:/conf:/lib/*
6 [root@master server]# Invalid maximum heap size: -Xmx4G
7 The specified size exceeds the maximum representable size.
8 Error: Could not create the Java Virtual Machine.
9 Error: A fatal exception has occurred. Program will exit.

解決方法:
請修改文件如:vim azkaban\azkaban-web-2.5.0\bin\azkaban-web-start.sh

打開文件使用命令搜索,在命令行模式下,按shift+:鍵打出冒號,然后輸入/,然后輸入想要搜索的內容,如:/-Xmx4G找到以后進行替換;

將文件中的  AZKABAN_OPTS="-Xmx4G" 修改為  AZKABAN_OPTS="-Xmx512M"

報錯原因如:設置的大小按照機器的存儲而定,如果設置太大可能無法啟動,設置太小會內存溢出。否則啟動報錯。


啟動過程如下即啟動成功(按Enter鍵,即可繼續輸入linux命令進行操作executor,因為這只是打印一下啟動日志,azkaban已經啟動起來了,可以使用jps進行查看進程):

 1 [root@master server]# bin/azkaban-web-start.sh 
 2 Using Hadoop from /home/hadoop/hadoop-2.4.1
 3 Using Hive from 
 4 bin/..
 5 :bin/../lib/azkaban-2.5.0.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib/commons-configuration-1.8.jar:bin/../lib/commons-dbcp-1.4.jar:bin/../lib/commons-dbutils-1.5.jar:bin/../lib/commons-email-1.2.jar:bin/../lib/commons-fileupload-1.2.1.jar:bin/../lib/commons-io-2.4.jar:bin/../lib/commons-jexl-2.1.1.jar:bin/../lib/commons-lang-2.6.jar:bin/../lib/commons-logging-1.1.1.jar:bin/../lib/commons-pool-1.6.jar:bin/../lib/guava-13.0.1.jar:bin/../lib/h2-1.3.170.jar:bin/../lib/httpclient-4.2.1.jar:bin/../lib/httpcore-4.2.1.jar:bin/../lib/jackson-core-asl-1.9.5.jar:bin/../lib/jackson-mapper-asl-1.9.5.jar:bin/../lib/jetty-6.1.26.jar:bin/../lib/jetty-util-6.1.26.jar:bin/../lib/joda-time-2.0.jar:bin/../lib/jopt-simple-4.3.jar:bin/../lib/junit-4.8.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/mail-1.4.5.jar:bin/../lib/mysql-connector-java-5.1.28.jar:bin/../lib/servlet-api-2.5.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.4.jar:bin/../lib/velocity-1.7.jar:bin/../lib/velocity-tools-2.0.jar:bin/../extlib/*.jar:bin/../plugins/*/*.jar:/home/hadoop/hadoop-2.4.1/conf:/home/hadoop/hadoop-2.4.1/*:/conf:/lib/*
 6 [root@master server]# 2017/12/14 14:43:46.276 +0800 ERROR [AzkabanWebServer] [Azkaban] Starting Jetty Azkaban Executor...
 7 2017/12/14 14:43:46.292 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban settings file from bin/../conf
 8 2017/12/14 14:43:46.292 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban properties file
 9 2017/12/14 14:43:46.306 +0800 INFO [AzkabanWebServer] [Azkaban] Setting up Jetty Https Server with port:8443 and numThreads:25
10 2017/12/14 14:43:46.327 +0800 INFO [log] [Azkaban] Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
11 2017/12/14 14:43:46.357 +0800 INFO [AzkabanWebServer] [Azkaban] Loading user manager class azkaban.user.XmlUserManager
12 2017/12/14 14:43:46.384 +0800 INFO [XmlUserManager] [Azkaban] Loading user azkaban
13 2017/12/14 14:43:46.386 +0800 INFO [XmlUserManager] [Azkaban] Loading user metrics
14 2017/12/14 14:43:46.386 +0800 INFO [XmlUserManager] [Azkaban] Loading user admin
15 2017/12/14 14:43:46.811 +0800 INFO [AzkabanWebServer] [Azkaban] Loading JDBC for project management
16 2017/12/14 14:43:46.815 +0800 INFO [ProjectManager] [Azkaban] Project version retention is set to 3
17 2017/12/14 14:43:46.816 +0800 INFO [ExecutorManager] [Azkaban] Cleaning old logs from execution_logs
18 2017/12/14 14:43:47.013 +0800 INFO [ExecutorManager] [Azkaban] Cleaning old log files before 2017-09-21T14:43:46.853+08:00
19 2017/12/14 14:43:47.019 +0800 INFO [ExecutorManager] [Azkaban] Cleaned up 0 log entries.
20 2017/12/14 14:43:47.056 +0800 INFO [TriggerManager] [Azkaban] TriggerManager loaded.
21 2017/12/14 14:43:47.057 +0800 INFO [AzkabanWebServer] [Azkaban] Loading built-in checker and action types
22 2017/12/14 14:43:47.064 +0800 INFO [CheckerTypeLoader] [Azkaban] Registering checker BasicTimeChecker
23 2017/12/14 14:43:47.064 +0800 INFO [CheckerTypeLoader] [Azkaban] Registering checker SlaChecker
24 2017/12/14 14:43:47.064 +0800 INFO [CheckerTypeLoader] [Azkaban] Registering checker ExecutionChecker
25 2017/12/14 14:43:47.064 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action ExecuteFlowAction
26 2017/12/14 14:43:47.065 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action KillExecutionAction
27 2017/12/14 14:43:47.065 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action AlertAction
28 2017/12/14 14:43:47.065 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action CreateTriggerAction
29 2017/12/14 14:43:47.065 +0800 INFO [AzkabanWebServer] [Azkaban] Loading trigger based scheduler
30 2017/12/14 14:43:47.069 +0800 INFO [AzkabanWebServer] [Azkaban] Loading plug-in checker and action types
31 2017/12/14 14:43:47.069 +0800 ERROR [AzkabanWebServer] [Azkaban] plugin path plugins/triggers doesn't exist!
32 2017/12/14 14:43:47.069 +0800 INFO [AzkabanWebServer] [Azkaban] Setting timezone to Asia/Shanghai
33 2017/12/14 14:43:47.069 +0800 INFO [AzkabanWebServer] [Azkaban] Registering MBeans...
34 2017/12/14 14:43:47.157 +0800 INFO [AzkabanWebServer] [Azkaban] Bean azkaban.jmx.JmxJettyServer registered.
35 2017/12/14 14:43:47.163 +0800 INFO [AzkabanWebServer] [Azkaban] Bean azkaban.jmx.JmxTriggerManager registered.
36 2017/12/14 14:43:47.172 +0800 INFO [AzkabanWebServer] [Azkaban] Bean azkaban.jmx.JmxExecutorManager registered.
37 2017/12/14 14:43:47.175 +0800 INFO [AzkabanWebServer] [Azkaban] Setting up web resource dir web/
38 2017/12/14 14:43:47.249 +0800 INFO [JdbcTriggerLoader] [Azkaban] Loading all triggers from db.
39 2017/12/14 14:43:47.308 +0800 INFO [JdbcTriggerLoader] [Azkaban] Loaded 0 triggers.
40 2017/12/14 14:43:47.308 +0800 INFO [log] [Azkaban] jetty-6.1.26
41 2017/12/14 14:43:47.991 +0800 INFO [log] [Azkaban] Started SslSocketConnector@0.0.0.0:8443 42 2017/12/14 14:43:47.993 +0800 INFO [AzkabanWebServer] [Azkaban] Server running on ssl port 8443.

 然后啟動執行服務器,在執行服務器目錄下執行啟動命令:bin/azkaban-executor-start.sh,關閉命令:[root@master executor]# bin/azkaban-executor-shutdown.sh注:只能要執行服務器根目錄運行;

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

 [root@master executor]# bin/azkaban-executor-start.sh

出現和啟動web一樣的錯誤,這里自己解決一下即可:

[root@master executor]# vim bin/azkaban-executor-start.sh

解決完錯誤以后接着啟動即可:

 1 [root@master executor]# bin/azkaban-executor-start.sh 
 2 Using Hadoop from /home/hadoop/hadoop-2.4.1
 3 Using Hive from 
 4 bin/..
 5 :bin/../lib/azkaban-2.5.0.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib/commons-configuration-1.8.jar:bin/../lib/commons-dbcp-1.4.jar:bin/../lib/commons-dbutils-1.5.jar:bin/../lib/commons-email-1.2.jar:bin/../lib/commons-fileupload-1.2.1.jar:bin/../lib/commons-io-2.4.jar:bin/../lib/commons-jexl-2.1.1.jar:bin/../lib/commons-lang-2.6.jar:bin/../lib/commons-logging-1.1.1.jar:bin/../lib/commons-pool-1.6.jar:bin/../lib/guava-13.0.1.jar:bin/../lib/h2-1.3.170.jar:bin/../lib/httpclient-4.2.1.jar:bin/../lib/httpcore-4.2.1.jar:bin/../lib/jackson-core-asl-1.9.5.jar:bin/../lib/jackson-mapper-asl-1.9.5.jar:bin/../lib/jetty-6.1.26.jar:bin/../lib/jetty-util-6.1.26.jar:bin/../lib/joda-time-2.0.jar:bin/../lib/jopt-simple-4.3.jar:bin/../lib/junit-4.8.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/mail-1.4.5.jar:bin/../lib/mysql-connector-java-5.1.28.jar:bin/../lib/servlet-api-2.5.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.4.jar:bin/../lib/velocity-1.7.jar:bin/../lib/velocity-tools-2.0.jar:bin/../extlib/*.jar:bin/../plugins/*/*.jar:/home/hadoop/hadoop-2.4.1/conf:/home/hadoop/hadoop-2.4.1/*:/conf:/lib/*
 6 Starting AzkabanExecutorServer on port 12321 ...
 7 [root@master executor]# 2017/12/14 14:52:31.724 +0800 ERROR [AzkabanExecutorServer] [Azkaban] Starting Jetty Azkaban Executor...
 8 2017/12/14 14:52:31.751 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban settings file from bin/../conf
 9 2017/12/14 14:52:31.752 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban private properties file
10 2017/12/14 14:52:31.753 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban properties file
11 2017/12/14 14:52:31.776 +0800 INFO [AzkabanExecutorServer] [Azkaban] Setting timezone to Asia/Shanghai
12 2017/12/14 14:52:31.805 +0800 INFO [log] [Azkaban] Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
13 2017/12/14 14:52:31.882 +0800 INFO [FlowRunnerManager] [Azkaban] Execution dir retention set to 86400000 ms
14 2017/12/14 14:52:31.894 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning recently finished
15 2017/12/14 14:52:31.895 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning old projects
16 2017/12/14 14:52:31.896 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning old execution dirs
17 2017/12/14 14:52:31.922 +0800 INFO [AzkabanExecutorServer] [Azkaban] Registering MBeans...
18 2017/12/14 14:52:31.993 +0800 INFO [AzkabanExecutorServer] [Azkaban] Bean azkaban.jmx.JmxJettyServer registered.
19 2017/12/14 14:52:32.003 +0800 INFO [AzkabanExecutorServer] [Azkaban] Bean azkaban.jmx.JmxFlowRunnerManager registered.
20 2017/12/14 14:52:32.003 +0800 INFO [log] [Azkaban] jetty-6.1.26
21 2017/12/14 14:52:32.108 +0800 INFO [log] [Azkaban] Started SocketConnector@0.0.0.0:12321
22 2017/12/14 14:52:32.108 +0800 INFO [AzkabanExecutorServer] [Azkaban] Azkaban Executor Server started on port 12321

最后可以進行瀏覽器訪問查看,如下所示(賬號密碼是azkaban-users.xml配置文件里面配置的):

由於訪問https,瀏覽器會攔截,這里添加可信任即可:

 

9:Azkaban的簡單實用,Azkaba內置的任務類型支持command、java;

Command類型單一job示例:

 第一步:創建job描述文件:

1 #command.job
2 type=command                                                    
3 command=echo 'hello world !'

第二步:將job資源文件打包成zip文件(在window打包):

第三步:通過azkaban的web管理平台創建project並上傳job壓縮包,首先呢,需要創建project:

然后上傳你的zip包,必須是zip包,如果是rar包會報如下的錯誤,如下所示:

頁面也提示如下錯誤:Installation Failed. Error unzipping file.

 1 azkaban.project.ProjectManagerException: Error unzipping file.
 2     at azkaban.project.ProjectManager.uploadProject(ProjectManager.java:318)
 3     at azkaban.webapp.servlet.ProjectManagerServlet.ajaxHandleUpload(ProjectManagerServlet.java:1389)
 4     at azkaban.webapp.servlet.ProjectManagerServlet.handleUpload(ProjectManagerServlet.java:1414)
 5     at azkaban.webapp.servlet.ProjectManagerServlet.handleMultiformPost(ProjectManagerServlet.java:163)
 6     at azkaban.webapp.servlet.LoginAbstractAzkabanServlet.doPost(LoginAbstractAzkabanServlet.java:240)
 7     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
 8     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
 9     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
10     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
11     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
12     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
13     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
14     at org.mortbay.jetty.Server.handle(Server.java:326)
15     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
16     at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
17     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
18     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
19     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
20     at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
21     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713)
22     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
23 Caused by: java.util.zip.ZipException: error in opening zip file
24     at java.util.zip.ZipFile.open(Native Method)
25     at java.util.zip.ZipFile.<init>(ZipFile.java:215)
26     at java.util.zip.ZipFile.<init>(ZipFile.java:145)
27     at java.util.zip.ZipFile.<init>(ZipFile.java:159)
28     at azkaban.project.ProjectManager.unzipFile(ProjectManager.java:402)
29     at azkaban.project.ProjectManager.uploadProject(ProjectManager.java:312)
30     ... 20 more

如果Mysql的圖形化工具無法查看自己的創建的hive或者azkaban數據表,應該是沒有權限的問題,賦予一下權限即可:

如果出現沒有權限的問題,在mysql授權(在安裝mysql的機器上執行)
    mysql -uroot -p123456
    #(執行下面的語句  *.*:所有庫下的所有表   %:任何IP地址或主機都可以連接)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

紅色區域內本應該存在上傳的文件的,可是這里死活不出來,不知道什么問題。百度好像也沒有說怎么解決,這里先記一下,看看日后解決的時候再貼一下。好難受。

此時此刻,離上句的好難受已經過去大約30分鍾了,突然想到一件事情,然后就解決這個問題了,開始呢,我搞了一個txt文件,寫上上面的命令,然后打成zip包,不是rar包,然后提交死活,頁面不顯示,感覺學習新東西,自己腦殘一樣,最后發現文件格式必須是.job格式的,然后打成的.zip包的。(azkaban上傳的zip包頁面不顯示,No FlowsNo flows have been uploaded to this project yet.如果你搜索這些關鍵字的話,看到這些話,希望可以幫助到你,最后注意文件的格式必須為UTF-8);

然后呢,可以看看summary可以看看最后一次運行狀態,正在運行的狀態等等。看看Graph工作流圖;可以點擊Execute Flow進行任務調度,如下所示:

然后出現下面界面:

最后如下所示:

到此結束,復雜案例,以后有機會再腦補吧。


azkaban后台啟動,偶爾會報這個錯誤,這里先不解決了,以后真正實在不行再來解決它,網上好多方法,沒去測試是否可行。先留一下吧。

 1 2017/12/14 17:40:55.147 +0800 WARN [log] [Azkaban] EXCEPTION 
 2 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
 3     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
 4     at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
 5     at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
 6     at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:972)
 7     at sun.security.ssl.ServerHandshaker.sendChangeCipherAndFinish(ServerHandshaker.java:1532)
 8     at sun.security.ssl.ServerHandshaker.clientHello(ServerHandshaker.java:671)
 9     at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167)
10     at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
11     at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
12     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
13     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
14     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
15     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
16     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)
17     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
18 Caused by: java.io.EOFException: SSL peer shut down incorrectly
19     at sun.security.ssl.InputRecord.read(InputRecord.java:482)
20     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
21     ... 14 more
22 2017/12/14 17:40:55.153 +0800 WARN [log] [Azkaban] EXCEPTION 
23 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
24     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
25     at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
26     at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
27     at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:972)
28     at sun.security.ssl.ServerHandshaker.sendChangeCipherAndFinish(ServerHandshaker.java:1532)
29     at sun.security.ssl.ServerHandshaker.clientHello(ServerHandshaker.java:671)
30     at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167)
31     at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
32     at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
33     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
34     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
35     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
36     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
37     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)
38     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
39 Caused by: java.io.EOFException: SSL peer shut down incorrectly
40     at sun.security.ssl.InputRecord.read(InputRecord.java:482)
41     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
42     ... 14 more
43 2017/12/14 17:41:06.377 +0800 WARN [log] [Azkaban] EXCEPTION 
44 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
45     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
46     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
47     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
48     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
49     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)
50     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
51 Caused by: java.io.EOFException: SSL peer shut down incorrectly
52     at sun.security.ssl.InputRecord.read(InputRecord.java:482)
53     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
54     ... 5 more

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM