從0到1搭建大數(shù)據(jù)平臺之調(diào)度系統(tǒng)

目前大數(shù)據(jù)平臺經(jīng)常會用來跑一些批任務(wù)砖第,跑批處理當(dāng)然就離不開定時任務(wù)。比如定時抽取業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)环凿,定時跑hive/spark任務(wù)梧兼,定時推送日報、月報指標數(shù)據(jù)智听。任務(wù)調(diào)度系統(tǒng)已經(jīng)儼然成為了大數(shù)據(jù)處理平臺不可或缺的一部分羽杰。

一渡紫、原始任務(wù)調(diào)度

image

?

記得第一次參與大數(shù)據(jù)平臺從無到有的搭建,最開始任務(wù)調(diào)度就是用的Crontab考赛,分時日月周惕澎,各種任務(wù)腳本配置在一臺主機上。crontab 使用非常方便颜骤,配置也很簡單唧喉。剛開始任務(wù)很少,用著還可以忍抽,每天起床巡檢一下日志八孝。隨著任務(wù)越來越多,出現(xiàn)了任務(wù)不能在原來計劃的時間完成鸠项,出現(xiàn)了上級任務(wù)跑完前干跛,后面依賴的任務(wù)已經(jīng)起來了,這時候沒有數(shù)據(jù)锈锤,任務(wù)就會報錯驯鳖,或者兩個任務(wù)并行跑了,出現(xiàn)了錯誤的結(jié)果久免。排查任務(wù)錯誤原因越來麻煩浅辙,各種任務(wù)的依賴關(guān)系越來越負責(zé),最后排查任務(wù)問題就行從一團亂麻中阎姥,一根一根梳理出每天麻繩记舆。crontab雖然簡單,穩(wěn)定呼巴,但是隨著任務(wù)的增加和依賴關(guān)系越來越復(fù)雜泽腮,已經(jīng)完全不能滿足我們的需求了,這時候就需要建設(shè)自己的調(diào)度系統(tǒng)了衣赶。

二诊赊、調(diào)度系統(tǒng)

多個任務(wù)單元之間往往有著強依賴關(guān)系,上游任務(wù)執(zhí)行并成功府瞄,下游任務(wù)才可以執(zhí)行碧磅。比如上游任務(wù)1結(jié)束后拿到結(jié)果,下游任務(wù)2遵馆、任務(wù)3需結(jié)合任務(wù)1的結(jié)果才能執(zhí)行鲸郊,因此下游任務(wù)的開始一定是在上游任務(wù)成功運行拿到結(jié)果之后才可以開始。而為了保證數(shù)據(jù)處理結(jié)果的準確性货邓,就必須要求這些任務(wù)按照上下游依賴關(guān)系有序秆撮、高效的執(zhí)行,最終確保能按時正常生成業(yè)務(wù)指標换况。

image

?

Airflow

Apache Airflow是一種功能強大的工具职辨,可作為任務(wù)的有向無環(huán)圖(DAG)編排盗蟆、任務(wù)調(diào)度和任務(wù)監(jiān)控的工作流工具。Airflow在DAG中管理作業(yè)之間的執(zhí)行依賴拨匆,并可以處理作業(yè)失敗姆涩,重試和警報。開發(fā)人員可以編寫Python代碼以將數(shù)據(jù)轉(zhuǎn)換為工作流中的操作惭每。

image

?

主要有如下幾種組件構(gòu)成:

  • web server: 主要包括工作流配置,監(jiān)控亏栈,管理等操作

  • scheduler: 工作流調(diào)度進程台腥,觸發(fā)工作流執(zhí)行,狀態(tài)更新等操作

  • 消息隊列:存放任務(wù)執(zhí)行命令和任務(wù)執(zhí)行狀態(tài)報告

  • worker: 執(zhí)行任務(wù)和匯報狀態(tài)

  • mysql: 存放工作流绒北,任務(wù)元數(shù)據(jù)信息

具體執(zhí)行流程:

  1. scheduler掃描dag文件存入數(shù)據(jù)庫黎侈,判斷是否觸發(fā)執(zhí)行

  2. 到達觸發(fā)執(zhí)行時間的dag,生成dag_run,task_instance 存入數(shù)據(jù)庫

  3. 發(fā)送執(zhí)行任務(wù)命令到消息隊列

  4. worker從隊列獲取任務(wù)執(zhí)行命令執(zhí)行任務(wù)

  5. worker匯報任務(wù)執(zhí)行狀態(tài)到消息隊列

  6. schduler獲取任務(wù)執(zhí)行狀態(tài)闷游,并做下一步操作

  7. schduler根據(jù)狀態(tài)更新數(shù)據(jù)庫

Kettle

將各個任務(wù)操作組件拖放到工作區(qū)峻汉,kettle支持各種常見的數(shù)據(jù)轉(zhuǎn)換。此外脐往,用戶可以將Python休吠,Java,JavaScript和SQL中的自定義腳本拖放到畫布上业簿。kettle可以接受許多文件類型作為輸入瘤礁,還可以通過JDBC,ODBC連接到40多個數(shù)據(jù)庫梅尤,作為源或目標柜思。社區(qū)版本是免費的,但提供的功能比付費版本少巷燥。

image

?

image

?

XXL-JOB

XXL-JOB是一個分布式任務(wù)調(diào)度平臺赡盘,其核心設(shè)計目標是開發(fā)迅速、學(xué)習(xí)簡單缰揪、輕量級陨享、易擴展。將調(diào)度行為抽象形成“調(diào)度中心”公共平臺邀跃,而平臺自身并不承擔(dān)業(yè)務(wù)邏輯霉咨,“調(diào)度中心”負責(zé)發(fā)起調(diào)度請求;將任務(wù)抽象成分散的JobHandler拍屑,交由“執(zhí)行器”統(tǒng)一管理途戒,“執(zhí)行器”負責(zé)接收調(diào)度請求并執(zhí)行對應(yīng)的JobHandler中業(yè)務(wù)邏輯;因此僵驰,“調(diào)度”和“任務(wù)”兩部分可以相互解耦喷斋,提高系統(tǒng)整體穩(wěn)定性和擴展性唁毒。(后來才知道XXL是作者名字拼音首字母縮寫)

image

?

調(diào)度系統(tǒng)開源工具有很多,可以結(jié)合自己公司人員的熟悉程度和需求選擇合適的進行改進星爪。

三浆西、如何設(shè)計調(diào)度系統(tǒng)

調(diào)度平臺其實需要解決三個問題:任務(wù)編排、任務(wù)執(zhí)行和任務(wù)監(jiān)控顽腾。

image

?

  • 任務(wù)編排近零,采用調(diào)用外部編排服務(wù)的方式,主要考慮的是編排需要根據(jù)業(yè)務(wù)的一些屬性進行實現(xiàn)抄肖,所以將易變的業(yè)務(wù)部分從作業(yè)調(diào)度平臺分離出去久信。如果后續(xù)有對編排邏輯進行調(diào)整和修改,都無需操作業(yè)務(wù)作業(yè)調(diào)度平臺漓摩。

  • 任務(wù)排隊裙士,支持多隊列排隊配置,后期根據(jù)不同類型的開發(fā)人員可以配置不同的隊列和資源管毙,比如面向不同的開發(fā)人員需要有不同的服務(wù)隊列腿椎,面向不同的任務(wù)也需要有不同的隊列優(yōu)先級支持。通過隊列來隔離調(diào)度夭咬,能夠更好地滿足具有不同需求的用戶啃炸。不同隊列的資源不同,合理的利用資源皱埠,達到業(yè)務(wù)價值最大化肮帐。

  • 任務(wù)調(diào)度,是對任務(wù)边器、以及屬于該任務(wù)的一組子任務(wù)進行調(diào)度训枢,為了簡單可控起見,每個任務(wù)經(jīng)過編排后會得到一組有序的任務(wù)列表忘巧,然后對每個任務(wù)進行調(diào)度恒界。這里面,稍有點復(fù)雜的是砚嘴,任務(wù)里還有子任務(wù)十酣,子任務(wù)是一些處理組件,比如字段轉(zhuǎn)換际长、數(shù)據(jù)抽取耸采,子任務(wù)需要在上層任務(wù)中引用實現(xiàn)調(diào)度。任務(wù)是調(diào)度運行的基本單位工育。被調(diào)度運行的任務(wù)會發(fā)送到消息隊列中虾宇,然后等待任務(wù)協(xié)調(diào)計算平臺消費并運行任務(wù),這時調(diào)度平臺只需要等待任務(wù)運行完成的結(jié)果消息到達如绸,然后對作業(yè)和任務(wù)的狀態(tài)進行更新嘱朽,根據(jù)實際狀態(tài)確定下一次調(diào)度的任務(wù)旭贬。

調(diào)度平臺設(shè)計中還需要注意以下幾項:

  1. 調(diào)度運行的任務(wù)需要進行超時處理,比如某個任務(wù)由于開發(fā)人員設(shè)計不合理導(dǎo)致運行時間過長搪泳,可以設(shè)置任務(wù)最大的執(zhí)行時長稀轨,超過最大時長的任務(wù)需要及時kill掉,以免占用大量資源岸军,影響正常的任務(wù)運行奋刽。

  2. 控制同時能夠被調(diào)度的作業(yè)的數(shù)量,集群資源是有限的凛膏,我們需要控制任務(wù)的并發(fā)量杨名,后期任務(wù)上千上萬后我們要及時調(diào)整任務(wù)的啟動時間,避免同時啟動大量的任務(wù)猖毫,減少調(diào)度資源和計算資源壓力;

  3. 作業(yè)優(yōu)先級控制须喂,每個業(yè)務(wù)都有一定的重要級別吁断,我們要有限保障最重要的業(yè)務(wù)優(yōu)先執(zhí)行,優(yōu)先給與調(diào)度資源分配坞生。在任務(wù)積壓時候仔役,先執(zhí)行優(yōu)先級高的任務(wù),保障業(yè)務(wù)影響最小化是己。

四又兵、總結(jié)

ETL 開發(fā)是數(shù)據(jù)工程師必備的技能之一,在數(shù)據(jù)倉庫卒废、BI等場景中起到重要的作用沛厨。但很多從業(yè)者連 ETL 對應(yīng)的英文是什么都不了解,更不要談對 ETL 的深入解析摔认,這無疑是非常不稱職的逆皮。做ETL 你可以用任何的編程語言來完成開發(fā),無論是 shell参袱、python电谣、java 甚至數(shù)據(jù)庫的存儲過程,只要它最終是讓數(shù)據(jù)完成抽饶ㄊ础(E)剿牺、轉(zhuǎn)化(T)、加載(L)的效果即可环壤。由于ETL是極為復(fù)雜的過程晒来,而手寫程序不易管理,所以越來越多的可視化調(diào)度編排工具出現(xiàn)了镐捧。

不管黑貓白貓潜索,只要能逮住老鼠就是好貓臭增。不管是哪種工具,只要具備高效運行竹习、易于維護兩個特點誊抛,都是一款好工具。

歷史好文推薦

  1. 如何從0到1搭建大數(shù)據(jù)平臺

  2. 日志收集組件—Flume整陌、Logstash拗窃、Filebeat對比

  3. 你是分析師,還是“提數(shù)機”泌辫?

  4. 談?wù)凟TL中的數(shù)據(jù)質(zhì)量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末随夸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震放,更是在濱河造成了極大的恐慌宾毒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殿遂,死亡現(xiàn)場離奇詭異诈铛,居然都是意外死亡,警方通過查閱死者的電腦和手機墨礁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門幢竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恩静,你說我怎么就攤上這事焕毫。” “怎么了驶乾?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵邑飒,是天一觀的道長。 經(jīng)常有香客問我轻掩,道長幸乒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任唇牧,我火速辦了婚禮罕扎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丐重。我一直安慰自己腔召,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布扮惦。 她就那樣靜靜地躺著臀蛛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浊仆,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天客峭,我揣著相機與錄音,去河邊找鬼抡柿。 笑死舔琅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洲劣。 我是一名探鬼主播备蚓,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼囱稽!你這毒婦竟也來了郊尝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤战惊,失蹤者是張志新(化名)和其女友劉穎流昏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吞获,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡横缔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了衫哥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡襟锐,死狀恐怖撤逢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粮坞,我是刑警寧澤蚊荣,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站莫杈,受9級特大地震影響互例,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筝闹,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一媳叨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧关顷,春花似錦糊秆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春汞舱,著一層夾襖步出監(jiān)牢的瞬間伍纫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工昂芜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莹规,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓说铃,卻偏偏與公主長得像访惜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腻扇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355