日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据之Azkaban部署

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据之Azkaban部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、Azkaban概論
    • 1.1 為什么需要工作流調度系統
    • 1.2 常見工作流調度系統
    • 1.3 Azkaban 與 Oozie 對比
  • 二、Azkaban集群安裝
    • 2.1 集群模式安裝
      • 2.1.1 安裝包準備
      • 2.1.2 配置 MySQL
      • 2.1.3 配置 Executor Server
      • 2.1.4 配置 Web Server
    • 2.2 Work Flow 案例
      • 2.2.1 HelloWorld
      • 2.2.2 作業依賴案例
      • 2.2.3 自動失敗重試案例
      • 2.2.4 手動失敗重試案例
  • 三、Azkaban進階
    • 3.1 JavaProcess 作業類型案例
    • 3.2 條件工作流案例
      • 3.2.1 運行時參數案例
      • 3.2.2 預定義宏案例
    • 3.3 定時執行案例
    • 3.4 郵件報警案例
      • 3.4.1 登錄郵箱開啟SMTP
      • 3.4.2 默認郵件報警案例
    • 3.5 電話報警案例
      • 3.5.1 第三方告警平臺集成
      • 3.5.2 Azkaban多Executor模式注意事項

一、Azkaban概論

1.1 為什么需要工作流調度系統

  • 一個完整的數據分析系統通常都是由大量任務單元組成:Shell腳本程序,Java程序,MapReduce程序,Hive腳本等;
  • 各任務單元之間存在時間先后及前后依賴關系;
  • 為了很好地組織起這樣的復雜執行計劃,需要一個工作流調度系統來調度執行;
  • 1.2 常見工作流調度系統

  • 簡單的任務調度:直接使用 Linux 的 Crontab 來定義;
    注??:Crontab不能處理具有依賴關系的任務調度!
  • 復雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如 Ooize、Azkaban、 Airflow、DolphinScheduler 等。
  • 1.3 Azkaban 與 Oozie 對比

    Ooize 相比 Azkaban 是一個重量級的任務調度系統,功能全面,但配置使用
    也更復雜。如果可以不在意某些功能的缺失,輕量級調度器 Azkaban 是很不錯的候選對象。

    二、Azkaban集群安裝

    2.1 集群模式安裝

    2.1.1 安裝包準備

  • 將 azkaban-db-3.84.4.tar.gz,azkaban-exec-server-3.84.4.tar.gz,azkaban-web-server-3.84.4.tar.gz 上傳到 hadoop102 的/opt/software 路徑;

  • 新建/opt/module/azkaban 目錄,并將所有 tar 包解壓到這個目錄下:

  • [xiaobai@hadoop102 azkaban]$ mkdir /opt /module/azkaban [xiaobai@hadoop102 azkaban]$ tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /opt/module/azkaban/ [xiaobai@hadoop102 azkaban]$ tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /opt/module/azkaban/ [xiaobai@hadoop102 azkaban]$ tar -zxvf azkaban-db-3.84.4.tar.gz -C /opt/module/azkaban/
  • 進入/opt/module/azkaban 目錄,修改名稱:
  • [xiaobai@hadoop102 azkaban]$ mv azkaban-web-server-3.84.4/ azkaban-web [xiaobai@hadoop102 azkaban]$ mv azkaban-exec-server-3.84.4/ azkaban-exec [xiaobai@hadoop102 azkaban]$ ll total 4 drwxr-xr-x. 2 xiaobai xiaobai 4096 Apr 18 2020 azkaban-db-3.84.4 drwxr-xr-x. 6 xiaobai xiaobai 55 Apr 18 2020 azkaban-exec drwxr-xr-x. 6 xiaobai xiaobai 51 Apr 18 2020 azkaban-web

    2.1.2 配置 MySQL

  • 啟動MySQL:
  • [xiaobai@hadoop102 azkaban]$ mysql -uroot -p******
  • 登陸 MySQL,創建 Azkaban 數據庫:
  • mysql> create database azkaban; Query OK, 1 row affected (0.19 sec)
  • 創建 azkaban 用戶并賦予權限 設置密碼有效長度 4 位及以上
  • mysql> set global validate_password_length=4; Query OK, 0 rows affected (0.07 sec)
  • 設置密碼策略最低級別(ps: 僅測試使用!)
  • mysql> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec)
  • 創建 Azkaban 用戶,任何主機都可以訪問 Azkaban, 密碼******:
  • mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY '******'; Query OK, 0 rows affected (0.17 sec)

    賦予 Azkaban 用戶增刪改查權限:

    mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION; Query OK, 0 rows affected (0.03 sec)
  • 創建 Azkaban 表,完成后退出 MySQL:
  • mysql> use azkaban; Database changed mysql> source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql; mysql> show tables; +-----------------------------+ | Tables_in_azkaban | +-----------------------------+ | QRTZ_BLOB_TRIGGERS | | QRTZ_CALENDARS | | QRTZ_CRON_TRIGGERS | | QRTZ_FIRED_TRIGGERS | | QRTZ_JOB_DETAILS | | QRTZ_LOCKS | | QRTZ_PAUSED_TRIGGER_GRPS | | QRTZ_SCHEDULER_STATE | | QRTZ_SIMPLE_TRIGGERS | | QRTZ_SIMPROP_TRIGGERS | | QRTZ_TRIGGERS | | active_executing_flows | | active_sla | | execution_dependencies | | execution_flows | | execution_jobs | | execution_logs | | executor_events | | executors | | project_events | | project_files | | project_flow_files | | project_flows | | project_permissions | | project_properties | | project_versions | | projects | | properties | | ramp | | ramp_dependency | | ramp_exceptional_flow_items | | ramp_exceptional_job_items | | ramp_items | | triggers | | validated_dependencies | +-----------------------------+ 35 rows in set (0.01 sec) mysql> quit; Bye

    所需腳本為create-all-sql-3.84.4.sql,如圖:

  • 更改 MySQL 包大小;防止 Azkaban 連接 MySQL 阻塞:
  • [xiaobai@hadoop102 azkaban]$ sudo vim /etc/my.cnf max_allowed_packet=1024M

    注??: 要放在在[mysqld]下面哦!

  • 重啟 MySQL:
  • [xiaobai@hadoop102 azkaban]$ sudo systemctl restart mysqld

    2.1.3 配置 Executor Server

    Azkaban Executor Server 處理工作流和作業的實際執行。

  • 在/opt/module/azkaban/azkaban-exec/conf目錄下編輯 azkaban.properties:
  • [xiaobai@hadoop102 conf]$ vim azkaban.properties default.timezone.id=Asia/Shanghai

  • 同步分發 azkaban-exec:
  • [xiaobai@hadoop102 conf]$ xsync /opt/module/azkaban/azkaban-exec/
  • 需進入/opt/module/azkaban/azkaban-exec 路徑,分別在三臺機器上,啟動 executor server:
  • [xiaobai@hadoop102 azkaban-exec]$ bin/start-exec.sh [xiaobai@hadoop103 azkaban-exec]$ bin/start-exec.sh [xiaobai@hadoop104 azkaban-exec]$ bin/start-exec.sh

    停止命令:

    [xiaobai@hadoop102 azkaban-exec]$ bin/shutdown-exec.sh

    注??:
    若在/opt/module/azkaban/azkaban-exec 目錄下出現 executor.port 文件:
    或在azkaban數據庫中的executors表中出現我們所連接的主機名稱及端口號,則說明啟動成功!

  • 激活 executor,如下status顯示success,則說明激活成功!
  • [xiaobai@hadoop102 azkaban-exec]$ curl -G "hadoop102:12321/executor?action=activate" && echo {"status":"success"} [xiaobai@hadoop103 azkaban-exec]$ curl -G "hadoop102:12321/executor?action=activate" && echo {"status":"success"} [xiaobai@hadoop104 azkaban-exec]$ curl -G "hadoop102:12321/executor?action=activate" && echo {"status":"success"}

    如圖,激活成功后active欄顯示為1!

    2.1.4 配置 Web Server

    Azkaban Web Server 處理項目管理,身份驗證,計劃和執行觸發。

  • 在/opt/module/azkaban/azkaban-web/conf目錄下編輯 azkaban.properties:
  • [xiaobai@hadoop102 conf]$ vim azkaban.properties

    修改如下屬性:

    tips:
    StaticRemainingFlowSize:正在排隊的任務數;
    CpuStatus:CPU占用情況:
    MinimumFreeMemory:內存占用情況。

  • 修改 azkaban-users.xml 文件,添加用戶xiaobai:
  • [xiaobai@hadoop102 conf]$ vim azkaban-users.xml <user password="******" roles="admin" username="xiaobai"/>

  • 需進入到 hadoop102 的/opt/module/azkaban/azkaban-web 路徑,啟動 web server:
  • [xiaobai@hadoop102 azkaban-web]$ bin/start-web.sh

    停止命令:

    [xiaobai@hadoop102 azkaban-web]$ bin/shutdown-web.sh
  • 訪問 http://hadoop102:8081,并用 xiaobai用戶登錄:
  • 2.2 Work Flow 案例

    2.2.1 HelloWorld

  • 創建command.job文件:
  • jane@janedeMacBook-Pro Desktop % vim command.job #command.job type=command command=echo 'hello world'

    壓縮command.job,在WebServer新建項目,點擊Create Project==>Upload==>command.job??
    點擊Execute Flow??

    點擊Execute ??

    Continue??

    工作單元日志在Job List??

    2.2.2 作業依賴案例

    需求:
    job A和job B執行完之后才能執行jobC。

    實現:

  • 新建first.project 文件,編輯內容如下:
  • azkaban-flow-version: 2.0

    注??: 該文件作用,是采用新的 Flow-API 方式解析 flow 文件。

  • 新建 first.flow 文件,內容如下
  • nodes:- name: jobAtype: commandconfig:command: echo "hello world A"- name: jobBtype: commandconfig:command: echo "hello world B"- name: jobCtype: command#jobC依賴于jobA和jobBdependsOn:- jobA- jobBconfig:command: echo "hello world C"

    注??:
    dependsOn與name/type對齊 是數組類型!

    1). Name: job 名稱;
    2). Type: job 類型;command 表示要執行作業的方式為命令;
    3). Config: job 配置。

    將文件壓縮上傳至Azkaban Web Client,點擊Execute flow,可以看到jobA / joB / jobC之間的依賴關系:

    查看job list:

    2.2.3 自動失敗重試案例

    需求:
    如果執行任務失敗,需要重試 3 次,重試的時間間隔 10000ms。

    實現:
    編譯配置流: autoretry.flow:

    nodes:- name: jobAtype: commandconfig:command: sh /not_exists.shretries: 3retry.backoff: 5000

    tips:
    retries: 重試次數;
    retry.backoff: 重試的時間間隔


    注??:
    可在 Flow 全局配置中添加任務失敗重試配置,此時重試配置會應用到所有 Job:

    config:retries: 3retry.backoff: 10000 nodes:- name: JobAtype: commandconfig:command: sh /not_exists.sh

    2.2.4 手動失敗重試案例

    需求:
    JobA=》JobB(依賴于 A)=》JobC=》JobD=》JobE=》JobF。生產環境,任何 Job 都 有可能掛掉,可以根據需求執行想要執行的 Job。

    實現:
    編譯配置流handsretry.flow:

    nodes:- name: JobAtype: commandconfig:command: echo "This is JobA."- name: JobBtype: commanddependsOn:- JobAconfig:command: echo "This is JobB."- name: JobCtype: commanddependsOn:- JobBconfig:command: echo "This is JobC."- name: JobDtype: commanddependsOn:- JobCconfig:command: echo "This is JobD."- name: JobEtype: commanddependsOn:- JobDconfig:command: echo "This is JobE."- name: JobFtype: commanddependsOn:- JobEconfig:command: echo "This is JobF."

    jobA-jobF執行圖:

    若是有失敗的job,可在history==>flow里進行查看
    之后點擊prepare execution可接著從失敗的job開始執行:

    或在excute flow中手動將已經成功的job設為disable / children,再繼續點擊execute!

    tips:
    Enable 和 Disable 下面都分別有如下參數:
    Parents: 該作業的上一個任務;
    Ancestors: 該作業前的所有任務;
    Children: 該作業后的一個任務;
    Descendents: 該作業后的所有任務;
    Enable All: 所有的任務。

    三、Azkaban進階

    3.1 JavaProcess 作業類型案例

    JavaProcess 類型可以運行一個自定義主類方法,type 類型為 javaprocess,可用的配置為:
    Xms:最小堆;
    Xmx:最大堆;
    classpath:類路徑;
    java.class:要運行的 Java 對象,其中必須包含 Main 方法 main.args:main 方法的參數。

    🌰:

  • 新建一個azkaban的maven工程;
  • 創建包名: cpm.xiaobai;
  • 創建TestJavaProcess類:
  • package com.xiaobai; public class TestJavaProcess {public static void main(String[] args) {System.out.println("Java Process Test!");} }
  • 打包jar包azkaban-javaprocess-1.0-SNAPSHOT.jar
  • 新建javatest.flow:
  • nodes:- name: test_javatype: javaprocessconfig:Xms: 96MXmx: 200Mjava.class: com.xiaobai.TestJavaProcess
  • 將jar包/ flow包/ project文件一起打包成javatest.zip;
  • 創建prohect–>upload–>executor:
  • 3.2 條件工作流案例

    條件工作流功能允許用戶自定義執行條件來決定是否運行某些 Job。條件可以由當前 Job 的父 Job 輸出的運行時參數構成,也可以使用預定義宏。在這些條件下,用戶可以在確定 Job 執行邏輯時獲得更大的靈活性,例如,只要父 Job 之一成功,就可以運行當前 Job。

    3.2.1 運行時參數案例

    基本原理

  • 父 Job 將參數寫入 JOB_OUTPUT_PROP_FILE 環境變量所指向的文件;
  • 子 Job 使用 ${jobName:param}來獲取父 Job 輸出的參數并定義執行條件。
  • 支持的條件運算符

  • == 等于
  • != 不等于
  • > 大于
  • >= 大于等于
  • < 小于
  • <= 小于等于
  • && 與
  • || 或
  • ! 非
  • 🌰:
    需求:
    JobA 執行一個 shell 腳本。
    JobB 執行一個 shell 腳本,但 JobB 不需要每天都執行,而只需要每個周一執行。

    實現:

  • 新建 JobA.sh:
  • #!/bin/bash echo "do JobA" wk=`date +%w` echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE
  • 新建 JobB.sh:
  • #!/bin/bash echo "do JobB"
  • 新建 condition.flow:
  • nodes:- name: JobAtype: commandconfig:command: sh JobA.sh- name: JobBtype: commanddependsOn:- JobAconfig:command: sh JobB.shcondition: ${JobA:wk} == 1

    將 JobA.sh、JobB.sh、condition.flow 和 frist.project 打包成 condition.zip;在Azkaban Web Client執行:

    JobA執行成功,JobB cancelled,要等到周一才執行jobB。

    3.2.2 預定義宏案例

    Azkaban 中預置了幾個特殊的判斷條件,稱為預定義宏。

    預定義宏會根據所有父 Job 的完成情況進行判斷,再決定是否執行;可用的預定義宏如下:

  • all_success: 表示父 Job 全部成功才執行(默認);
  • all_done:表示父 Job 全部完成才執行;
  • all_failed:表示父 Job 全部失敗才執行;
  • one_success:表示父 Job 至少一個成功才執行;
  • one_failed:表示父 Job 至少一個失敗才執行。
  • 需求:
    JobA 執行一個 shell 腳本;
    JobB 執行一個 shell 腳本;
    JobC 執行一個 shell 腳本,要求 JobA、JobB 中有一個成功即可執行;

    實現:

  • 新建 JobA.sh:
  • #!/bin/bash echo "do JobA"
  • 新建 JobC.sh:
  • #!/bin/bash echo "do JobC"
  • 新建 macro.flow:
  • nodes:- name: JobAtype: commandconfig:command: sh JobA.sh- name: JobBtype: commandconfig:command: sh JobB.sh- name: JobCtype: commanddependsOn:- JobA- JobBconfig:command: sh JobC.shcondition: one_success

    JobA.sh、JobC.sh、macro.flow、frist.project 文件,打包成 macro.zip;在Azkaban Web Client執行:

    JobA success,JobB fail,JobC success!

    3.3 定時執行案例

    需求:
    JobA 每間隔 1 分鐘執行一次;

    實現:
    在執行工作流時候,選擇左下角 Schedule

    填寫定時規則:

    可在history中查看first的執行情況,每間隔一分鐘執行一次:

    scheduling中有next execution time可查看下一次執行時間和remove schedule選項移除掉這個定時任務:

    3.4 郵件報警案例

    3.4.1 登錄郵箱開啟SMTP

    在郵箱的賬戶里面開啟SMTP服務:

    復制授權碼:

    3.4.2 默認郵件報警案例

    Azkaban 默認支持通過郵件對失敗的任務進行報警,配置方法如下:

  • 在/opt/module/azkaban/azkaban-web/conf目錄下修改azkaban.properties文件:
  • [xiaobai@hadoop102 conf]$ vim azkaban.properties

  • 需重啟 web-server:
  • [xiaobai@hadoop102 azkaban-web]$ bin/shutdown-web.sh [xiaobai@hadoop102 azkaban-web]$ bin/start-web.sh

    3.5 電話報警案例

    3.5.1 第三方告警平臺集成

    有時任務執行失敗后郵件報警接收不及時,因此可能需要其他報警方式,比如電話報警。
    此時,可與第三方告警平臺進行集成,例如睿象云。

  • 官網地址:
    https://www.aiops.com/
  • 集成告警平臺,使用 Email 集成;
  • 獲取郵箱地址,后需將報警信息發送至該郵箱;
  • 可配置分派策略/ 通知策略;
  • 注??: 若要使用睿象云集成方式,則不可用QQ郵箱,需修改郵箱地址。

    3.5.2 Azkaban多Executor模式注意事項

    Azkaban 多 Executor 模式是指,在集群中多個節點部署 Executor。在這種模式下, Azkaban web Server 會根據策略,選取其中一個 Executor 去執行任務。
    為確保所選的 Executor 能夠準確的執行任務,我們須在以下兩種方案任選其一,推薦使 用方案二。

    方案一:
    指定特定的 Executor(hadoop102)去執行任務。

  • 在 MySQL 中 azkaban 數據庫 executors 表中,查詢 hadoop102 上的 Executor 的 id;

  • 在執行工作流程時加入 useExecutor 屬性:

  • 方案二??:
    在 Executor 所在所有節點部署任務所需腳本和應用。

    總結

    以上是生活随笔為你收集整理的大数据之Azkaban部署的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。