大數據Hadoop之——Azkaban API詳解

来源:https://www.cnblogs.com/liugp/archive/2022/05/16/16278800.html
-Advertisement-
Play Games

一、Azkaban API概述 通常,企業里一般不用使用web UI去設置或者執行任務,只是單純的在頁面上查看任務或者排查問題,更多的是通過Azkaban API去提交執行任務計劃。Azkaban提供了一些常用的API操作,可以通過curl或其他HTTP請求客戶端訪問。但是API調用都需要首先進行適 ...


目錄

一、Azkaban API概述

通常,企業里一般不用使用web UI去設置或者執行任務,只是單純的在頁面上查看任務或者排查問題,更多的是通過Azkaban API去提交執行任務計劃。Azkaban提供了一些常用的API操作,可以通過curl或其他HTTP請求客戶端訪問。但是API調用都需要首先進行適當的身份驗證。官方文檔:https://azkaban.readthedocs.io/en/latest/ajaxApi.html

Azkaban 基本部分包括環境部署可以參考我之前的文章:大數據Hadoop之——任務調度器Azkaban(Azkaban環境部署)

二、Azkaban API具體使用

目前在這個版本的大多數api中,它不檢查請求頭。但是最好還是加上請求頭。請求頭如下:

Content-Type:     application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest

1)Authenticate(登錄認證)

這個API幫助驗證用戶並提供會話保持,會返回session.id,預設情況下,會話超時時間為24小時(一天)

請求格式如下:

Method: POST
Request URL: /?action=login
Parameter Location: Request body

請求參數如下:

參數 描述
action=login 固定參數
用戶名 Azkaban 登錄用戶名
密碼 Azkaban 登錄密碼
【示例】
$ curl -k -X POST --data "action=login&username=azkaban&password=azkaban" https://localhost:8443

## 提取session.id,註意每次請求返回的session.id都不一樣
$ curl -sk -X POST --data "action=login&username=azkaban&password=azkaban" https://localhost:8443|jq '."session.id"'|sed 's/\"//g'

設置.session.id的兩種方式

  • 簡單地作為請求參數添加
  • 通過cookie設置:azkaban.browser.session.id

下麵兩個HTTP請求是等價的:

#【溫馨提示】執行下麵兩個api是必須得提前創建了`project:HelloWorld`和`flow:helloworld`
# a) Provide session.id parameter directly
$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchflowgraph&project=HelloWorld&flow=helloworld" https://localhost:8443/manager

# b) Provide azkaban.browser.session.id cookie
$ curl -k --get -b "azkaban.browser.session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480" --data "ajax=fetchflowgraph&project=HelloWorld&flow=helloworld" https://localhost:8443/manager

2)Fetch user Projects(獲取項目列表)

請求格式如下:

Method: GET
Request URL: /index?ajax=fetchuserprojects
Parameter Location: Request Query

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchuserprojects 固定參數
user (可選) 要列出項目的用戶名。預設情況下,獲取登錄用戶的項目列表。

【示例】

# --get等價於-G,-X GET,預設就是GET請求,下麵三個請求等價
$ curl -k --get --data "ajax=fetchuserprojects&user=azkaban&session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480" https://localhost:8443/index

$ curl -k -X GET -G --data "ajax=fetchuserprojects&user=azkaban&session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480" https://localhost:8443/index

# user預設就是session.id對應的用戶
$ curl -k -G --data "ajax=fetchuserprojects&session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480" https://localhost:8443/index

3)Create a Project(創建一個項目)

請求格式如下:

Method: POST
Request URL: /manager?action=create
Parameter Location: Request Query

請求參數如下:

參數 描述
session.id 用戶的session.id
action=create 固定參數
name 項目名稱
description 項目描述

【示例】

$ curl -k -X POST --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&name=test001&description=create a azkaban project" https://localhost:8443/manager?action=create

4)Delete a Project(刪除一個項目)

請求格式如下:

Method: GET
Request URL: /manager?delete=true
Parameter Location: Request Query

請求參數如下:

參數 描述
session.id 用戶的session.id
delete=true 表示刪除項目操作的固定參數
project 要刪除的項目名稱

【示例】

$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&delete=true&project=test001" https://localhost:8443/manager

5)Upload a Project Zip(上傳項目zip文件)

請求格式如下:

Method: POST
Content-Type: multipart/mixed
Request URL: /manager?ajax=upload
Parameter Location: Request Body

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=upload 固定參數
project 要上傳的項目名稱
file 項目壓縮文件。類型應該設置為application/zipapplication/x-zip-compressed
# 先創建項目
$ curl -k -X POST --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&name=test001&description=create a azkaban project" https://localhost:8443/manager?action=create

# 準備好zip文件,長傳項目zip文件
$ curl -k -i -X POST --form 'session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480' --form 'ajax=upload' --form 'file=@projects/test001.zip;type=application/zip' --form 'project=test001' https://localhost:8443/manager

6)Fetch Flows of a Project(獲取項目的所有工作流flowId)

請求格式如下:

Method: GET
Request URL: /manager?ajax=fetchprojectflows
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchprojectflows 固定參數
project 要獲取工作流對應的項目名稱

【示例】

$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchprojectflows&project=test001" https://localhost:8443/manager

7)Fetch Jobs of a Flow(獲取一個工作流的詳情)

請求格式如下:

Method: GET
Request URL: /manager?ajax=fetchflowgraph
Parameter Location: Request Query String

請求參數如下:

Method: GET
Request URL: /manager?ajax=fetchflowgraph
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchflowgraph 固定參數
project 要獲取的項目名稱
flow 要獲取的項目的工作流id,上一個介面獲取的flowId
【示例】
# 獲取flowId
$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchprojectflows&project=test001" https://localhost:8443/manager
# 獲取工作流的具體信息
$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchflowgraph&project=test001&flow=test001" https://localhost:8443/manager

8)Fetch Executions of a Flow(獲取工作流的執行列表)

請求格式如下:

Method: GET
Request URL: /manager?ajax=fetchFlowExecutions
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchFlowExecutions 固定參數
project 項目名稱
flow flowId
start 返回列表的起始位置
length 返回列表的最大長度。例如,如果起始位置是2,長度是10,那麼返回的列表將包括執行索引:[2,3,4,5,6,7,8,9,10,11]

【示例】
這裡設置每分鐘調度一次

其實獲取的就是下圖的列表信息

獲取最新執行的3條記錄,請求示例如下:

$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchFlowExecutions&project=test001&flow=test001&start=0&length=3" https://localhost:8443/manager

9)Fetch Running Executions of a Flow(獲取正在執行的工作流)

請求格式如下:

Method: GET
Request URL: /executor?ajax=getRunning
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=getRunning 固定參數
project 項目名稱
flow flowId

【示例】

$ curl -k --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=getRunning&project=test001&flow=test001" https://localhost:8443/executor

10)Execute a Flow(立即執行工作流)

請求格式如下:

Method: POST
Request URL: /executor?ajax=executeFlow
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=executeFlow 固定參數
project 項目名稱
flow flowId

【示例】

$ curl -k -X POST --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=executeFlow&project=test001&flow=test001" https://localhost:8443/executor


11)Cancel a Flow Execution(取消工作流執行)

請求格式如下:

Method: GET
Request URL: /executor?ajax=cancelFlow
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=cancelFlow 固定參數
execid Execution id
【示例】
$ curl -k --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=cancelFlow&execid=78" https://localhost:8443/executor


12)Flexible scheduling using Cron(定時調度工作流【重點】)

這個API調用通過一個cron Expression調度一個流。Cron是一個已經被廣泛使用了很長一段時間的UNIX工具,我們使用Quartz庫來解析Cron表達式。所有的cron時間表都遵循azkaban web伺服器中定義的時區(時區ID由java.util.TimeZone.getDefault(). getid()獲得)

請求格式如下:

Method: POST
Request URL: /schedule?ajax=scheduleCronFlow
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=scheduleCronFlow 固定參數
projectName 工程名稱
flow flowId
cronExpression CRON表達式是由6或7個用空格分隔的欄位組成的字元串,表示一組時間,跟linux系統上的crontab一樣。在Azkaban ,我們Quartz Cron Format

【示例】

  • ? 表示占位符。比如? ? * * * *,如果在8:25啟動的話,就會被解析成25 8 * * * *
  • # 用於指定本月的第n個XXX日。例如,day-of-week欄位中的“6#3”的值表示“該月的第三個星期五”(第6天=星期五,“#3”=該月的第三個星期五)。其他例子:“2#1”=這個月的第一個星期一,“4#5”=這個月的第五個星期三。請註意,如果您指定了“#5”,而當月的給定周中沒有5天,那麼當月將不會發生,會到下個月。
### 定時任務表達式解釋0 23/30 5,7-10 ? * 6#3 2023
# 0:表示0秒,固定的
# 23/30:23分之後每半個小時執行一次,當然還得更加後面表達式而定
# 5,7-10:5,7,8,9,10這四個整點,每半個小時執行一次
# ?:占位符,根據其它時間而定
# *:每月
# 6#3:表示周,該月的第三個星期五,如果當月沒有,則到下個月
# 2023:可選,預設是每年
### 重覆執行是修改覆蓋
$ curl -k -d ajax=scheduleCronFlow -d projectName=test001 -d flow=test001 --data-urlencode cronExpression="0 23/30 5,7-10 ? * 6#3 2023" -b "azkaban.browser.session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480" https://localhost:8443/schedule

通過下圖可能更好的理解cron表示式

重覆執行修改

13)Fetch a Schedule(獲取調度任務)

請求格式如下:

Method: GET
Request URL: /schedule?ajax=fetchSchedule
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchSchedule 固定參數
projectId 項目的id
flowId flowId
# 獲取projectId 和 flowId 
$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchprojectflows&project=test001" https://localhost:8443/manager

# Fetch a Schedule
$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchSchedule&projectId=19&flowId=test001" https://localhost:8443/scheule

14)Unschedule a Flow(取消工作流的定時任務)

請求格式如下:

Method: POST
Request URL: /schedule?action=removeSched
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
action=removeSched 固定參數
scheduleId 調度任務id

【示例】

$ curl -k https://localhost:8443/schedule -d "action=removeSched&scheduleId=8" -b azkaban.browser.session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480 https://localhost:8443/schedule

15)Fetch Logs of a Project(獲取項目日誌)

請求格式如下:

Method: GET
Request URL: /manager?ajax=fetchProjectLogs
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchProjectLogs 固定參數
project 項目名稱

【示例】

$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchProjectLogs&project=test001" https://localhost:8443/manager

16)Fetch Execution Job Logs(獲取執行任務日誌)

請求格式如下:

Method: GET
Request URL: /executor?ajax=fetchExecJobLogs
Parameter Location: Request Query String

請求參數如下:

參數 描述
session.id 用戶的session.id
ajax=fetchExecJobLogs 固定參數
execid execid
jobId jobId,其實就是flow文件里的job name
offset 日誌數據的偏移量
length 日誌數據的長度。例如,如果偏移量設置為10,長度為1000,則返回的日誌將從第10個字元開始,長度為1000(如果剩餘的日誌長度小於1000,則小於1000)

【示例】

# 獲取job id也就是job name
$ curl -k --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchexecflow&execid=105" https://localhost:8443/executor
# 獲取日誌
$ curl -k --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=fetchExecJobLogs&execid=105&jobId=jobA&offset=0&length=100" https://localhos:8443/executor

17)設置SLA報警

請求格式如下:

Method: POST
Request URL: /schedule?ajax=setSla
Parameter Location: Request Query String
$ curl -k -d "ajax=setSla&scheduleId=9&[email protected];[email protected]&settings[0]=aaa,SUCCESS,5:00,true,false&settings[1]=bbb,SUCCESS,10:00,false,true" -b "azkaban.browser.session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480" https://localhost:8443/schedule


這個API在企業里用的不多,在web UI上操作更方便直觀 ,稍微瞭解就行。

18)Fetch a SLA

這個API也是用的不多,在web UI上查看更方便,瞭解即可。

請求格式如下:

Method: GET
Request URL: /schedule?ajax=slaInfo
Parameter Location: Request Query String

【示例】

$ curl -k --get --data "session.id=b2528ee7-0189-46d3-9a68-e03ea00ad480&ajax=slaInfo&scheduleId=9" https://localhost:8443/schedule

【溫馨提示】這裡為了方便都是通過curl方式去測試,其實在公司環境中,更多的可能是用python、或者java等高級語言去調用Azkaban API。這裡只是列出了常見的API介面,尤其是上面第12個介面Flexible scheduling using Cron用的是最多的。更多Azkaban API介面使用,請查看官方文檔

未完待續,請小伙伴耐心等待~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、ReentrantLock可重入鎖 可重入鎖ReentrantLock 是一個互斥鎖,即同一時間只有一個線程能夠獲取鎖定資源,執行鎖定範圍內的代碼。這一點與synchronized 關鍵字十分相似。其基本用法代碼如下: Lock lock = new ReentrantLock(); //實例化 ...
  • 為了瞭解應用程式是如何配置和初始化,本文將探討ASP.NET Core和ABP框架最基本的構建模塊。我們將從 ASP.NET Core 的 Startup類開始瞭解為什麼我們需要模塊化系統,以及 ABP 如何提供模塊化方式來配置和初始化應用程式。然後我們將探索 ASP.NET Core 的依賴註入, ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 1.下載WSL Ubuntu 打開微軟商店,搜索linux,找到Ubuntu並下載 2.安裝WSL Ubuntu 下載完成以後先不要安裝,因為預設安裝位置是在c盤,此時在其他盤新建一個文件夾,打開C:\Program Files\WindowsA ...
  • ##方法一: ###1、首先打開控制面板,然後將右側的查看方式設置為大圖標,接著選擇區域和語言。 ###2、進入到界面之後,先定位到上方的格式,接著把格式設置為中文。 ###3、之後再定位到上方的位置,選擇中國。 ###4、接著再定位到上方的管理選項,然後點擊更改系統區域設置。 ###5、接著在彈出 ...
  • rpm命令 rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 發行版專門用來管理 Linux 各項套件的程式,由於它遵循 GPL 規則且功能強大方便,因而廣受歡迎。逐漸受到其他發行版的採用。RPM 套件管理方式的出現,讓 Linux 易於安裝,升級 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 centos換源+安裝postgresql http://mirror.nsc.liu.se/centos-store/8.2.2004/isos/x86_64/ 鏡像安裝網站 https://mirrors.edge.kernel.org/pu ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 實現通過串口助手發送單位元組數據,單片機收到數據後,交換高4位與低4位,將新的數據通過串口發回串口助手。例如,串口 ...
  • 前言: 這是《VMware 虛擬機圖文安裝和配置 Rocky Linux 8.5 教程》一文的姐妹篇教程,如果你需要閱讀它,請點擊這裡。 2020 年,CentOS 宣佈:計劃未來將重心從 CentOS Linux 轉移到 CentOS Stream。CentOS 8 的生命周期已於 2021 年 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...