數(shù)據(jù)平臺(tái)工具系統(tǒng)概述
談到大數(shù)據(jù)平臺(tái)赎婚,在當(dāng)今大數(shù)據(jù)備受關(guān)注的時(shí)代刘绣,大家首先想到會(huì)是HDFS、YARN挣输、Hbase纬凤、Spark、Hive之類著名開源組件撩嚼,當(dāng)然目前基于開源解決方案的大數(shù)據(jù)平臺(tái)建設(shè)一般也是圍繞著它們作為底層支持的停士,我司也是采用這種開源方案,那么是否我們將這些組件配置好參數(shù)搭建run起來完丽,就可以稱之為我們已經(jīng)有了大數(shù)據(jù)平臺(tái)了呢恋技?這個(gè)回答當(dāng)然是否定的。
目前從業(yè)界來看逻族,如果是基于PasS層做數(shù)據(jù)平臺(tái)建設(shè)的(本文也是基于PasS層平臺(tái)建設(shè)做討論)蜻底,基本都需要在這些Hadoop生態(tài)基礎(chǔ)組件之上研發(fā)衍生出工具系統(tǒng)層,那工具系統(tǒng)層的主要的作用是什么聘鳞,我認(rèn)為主要有以下幾點(diǎn):
1薄辅、基礎(chǔ)服務(wù)封裝要拂,滿足業(yè)務(wù)需求:如數(shù)據(jù)采集系統(tǒng)每天從業(yè)務(wù)系統(tǒng)抽取幾千張表的數(shù)據(jù)存儲(chǔ)到HDFS中,數(shù)據(jù)倉庫團(tuán)隊(duì)后續(xù)基于存儲(chǔ)在HDFS上的數(shù)據(jù)進(jìn)行數(shù)據(jù)倉庫的建設(shè)站楚。
2宇弛、減少使用門檻和學(xué)習(xí)成本:Hadoop生態(tài)系統(tǒng)的周邊組件的使用有技術(shù)使用門檻,一般操作接口都是Linux命令或需要編程對(duì)接的API程序接口源请。
3枪芒、安全性:Hadoop生態(tài)周邊組件的安全性提供的一般相對(duì)比較薄弱,需要嚴(yán)格控制谁尸,需要在工具系統(tǒng)層面做統(tǒng)一收口舅踪,也就是說將業(yè)務(wù)同事的操作由工具系統(tǒng)代理提交給Hadoop生態(tài),工具系統(tǒng)就可以控制操作的安全性良蛮,數(shù)據(jù)的安全性抽碌,當(dāng)然我們討論的基于PasS層做數(shù)據(jù)平臺(tái)建設(shè),如果基于SasS層做數(shù)據(jù)平臺(tái)建設(shè)决瞳,一般可考慮使用Kerberos做安全性控制货徙,但是細(xì)粒度的數(shù)據(jù)權(quán)限還是很難控制的。
回到本文正題皮胡,大數(shù)據(jù)平臺(tái)工具系統(tǒng)之任務(wù)調(diào)度系統(tǒng)痴颊。從業(yè)界各大互聯(lián)網(wǎng)公司以及我司的任務(wù)調(diào)度系統(tǒng)在數(shù)據(jù)平臺(tái)的作用來看,像點(diǎn)樣子的大數(shù)據(jù)平臺(tái)屡贺,基本都有調(diào)度系統(tǒng)的存在蠢棱。
調(diào)度系統(tǒng)的類別
從技術(shù)實(shí)現(xiàn)和功能層面結(jié)合來劃分,市場(chǎng)上目前有兩類的調(diào)度系統(tǒng)
1甩栈、基于時(shí)間維度的
基于時(shí)間維度的這類調(diào)度系統(tǒng)最根本的功能就是將任務(wù)在指定的時(shí)間計(jì)劃下泻仙,正確及時(shí)的運(yùn)行起來,比如我希望一個(gè)任務(wù)在每周三的下午14點(diǎn)運(yùn)行起來量没,Linux的crontab玉转、quartz、cron4j殴蹄、當(dāng)當(dāng)網(wǎng)的elastic-job都屬于這類究抓,當(dāng)當(dāng)網(wǎng)的elastic-job在高可用、集群化饶套、失敗轉(zhuǎn)移漩蟆、分片化執(zhí)行任務(wù)方面做的更加的完善垒探,這里不做深入討論妓蛮。
2、基于DAG關(guān)系維度(也可結(jié)合時(shí)間維度)
這類調(diào)度系統(tǒng)主要的目標(biāo)是基于DAG圖圾叼,將任務(wù)在指定的邏輯關(guān)系下正確執(zhí)行蛤克,也可以結(jié)合時(shí)間維度捺癞,我司的調(diào)度系統(tǒng)目前也是采用DAG關(guān)系維度方向。
舉2個(gè)例子:
A任務(wù)執(zhí)行完才可以執(zhí)行A任務(wù)下的B任務(wù)构挤。
A任務(wù)12點(diǎn)執(zhí)行髓介,A執(zhí)行完下面的B任務(wù)才可以執(zhí)行。
上面的例子比較簡(jiǎn)單筋现,現(xiàn)實(shí)場(chǎng)景可能涉及到幾百個(gè)任務(wù)相互關(guān)聯(lián)依賴唐础,以及任務(wù)執(zhí)行之間的延遲策略,周期性執(zhí)行策略都需要考慮矾飞。
目前這類開源調(diào)度系統(tǒng)比較出名的有Azkaban一膨、oozie。
選擇自研還是開源直接使用
針對(duì)自研還是使用開源版本直接使用洒沦,我們選擇的是自研方向豹绪,主要有以下幾點(diǎn)原因:
使用開源有學(xué)習(xí)成本:如果想用好開源產(chǎn)品,遇到問題及時(shí)解決申眼,必須在功能和代碼實(shí)現(xiàn)級(jí)別都非常熟悉瞒津,需要有一定的學(xué)習(xí)時(shí)間。
兼容性:我們數(shù)據(jù)平臺(tái)的工具系統(tǒng)層的其它工具系統(tǒng)都是自研括尸,如果中間有一個(gè)開源的巷蚪,這樣對(duì)后續(xù)的產(chǎn)品交互通信和功能層面都需要進(jìn)行銜接,可能還需要二次開發(fā)濒翻。
功能不滿足:開源產(chǎn)品的功能不一定滿足自身的業(yè)務(wù)場(chǎng)景钓辆。
當(dāng)然事情不是絕對(duì)的,需要根據(jù)自身的資源和實(shí)際情況做考慮肴焊。
我們自研調(diào)度系統(tǒng)實(shí)現(xiàn)了哪些功能
任務(wù)配置管理:支持添加任務(wù)基本信息前联,同一個(gè)界面支持配置關(guān)系維度、時(shí)間維度娶眷,以及關(guān)系維度和時(shí)間維度的混合配置方式似嗤。界面化操作配置,無需像oozie配置任務(wù)工作流需要編寫XML文件后加載届宠。
任務(wù)觸發(fā)機(jī)制:支持時(shí)間維度烁落、時(shí)間和關(guān)系維度結(jié)合觸發(fā)任務(wù)執(zhí)行機(jī)制,下圖舉出三種示例:
任務(wù)延遲執(zhí)行策略:任務(wù)延時(shí)執(zhí)行策略的使用一般發(fā)生時(shí)間和關(guān)系結(jié)合的場(chǎng)景豌注,目前我們系統(tǒng)采用的延遲即刻恢復(fù)策略伤塌,那先來說說什么叫延遲即刻恢復(fù)策略,我們先來看一下如下圖示兩個(gè)場(chǎng)景:
我們先來分析一下場(chǎng)景1的情況轧铁,A任務(wù)1點(diǎn)半開始運(yùn)行每聪,B任務(wù)依賴A任務(wù)2點(diǎn)運(yùn)行,假設(shè)A任務(wù)1點(diǎn)半開始運(yùn)行后,運(yùn)行了半個(gè)小時(shí)到2點(diǎn)還沒有運(yùn)行完药薯,這個(gè)時(shí)候到了B任務(wù)2點(diǎn)啟動(dòng)的時(shí)間發(fā)現(xiàn)A任務(wù)沒有運(yùn)行完绑洛,程序這時(shí)就會(huì)將任務(wù)B標(biāo)記為父任務(wù)延遲狀態(tài),那假設(shè)A任務(wù)在2點(diǎn)20的時(shí)候執(zhí)行完成了童本,應(yīng)用延遲即刻恢復(fù)策略真屯,就會(huì)馬上將B任務(wù)帶起了運(yùn)行。
我們?cè)賮砜匆幌聢?chǎng)景2的稍微復(fù)雜一點(diǎn)的情況穷娱,A任務(wù)每小時(shí)運(yùn)行一次绑蔫,B任務(wù)依賴A任務(wù)每天的2點(diǎn)運(yùn)行一次,假設(shè)A任務(wù)1點(diǎn)開始執(zhí)行泵额,但是執(zhí)行到2點(diǎn)還沒有運(yùn)行完晾匠,大家注意到了2點(diǎn)A任務(wù)的下一個(gè)執(zhí)行周期也到了,并且B任務(wù)也需要在2點(diǎn)執(zhí)行梯刚,那遇到這種情況凉馆,我們處理邏輯是這樣做的,將A任務(wù)標(biāo)記為自延遲狀態(tài)并且在2點(diǎn)的時(shí)候不執(zhí)行亡资,將B任務(wù)標(biāo)記為父任務(wù)延遲狀態(tài)并且在2點(diǎn)的時(shí)候也不執(zhí)行澜共,如果A任務(wù)在2點(diǎn)20執(zhí)行完成,則將B任務(wù)應(yīng)用延遲即刻恢復(fù)策略馬上執(zhí)行起來锥腻。不知道大家有沒有疑問就是A任務(wù)目前也是自延遲狀態(tài)嗦董,它會(huì)應(yīng)用延遲即刻恢復(fù)策略馬上運(yùn)行起來嗎?答案是不能的瘦黑,因?yàn)锳任務(wù)如果馬上運(yùn)行起來京革,狀態(tài)就是開始狀態(tài),B任務(wù)運(yùn)行起來后看見A任務(wù)是開始狀態(tài)則必然失敗幸斥,所以此處需要增加一個(gè)邏輯就是自延遲狀態(tài)的任務(wù)在恢復(fù)階段匹摇,需要檢查這個(gè)任務(wù)下面是否有父任務(wù)延遲狀態(tài)的任務(wù),如果有甲葬,優(yōu)先將這個(gè)任務(wù)下處于父任務(wù)延遲狀態(tài)的子任務(wù)恢復(fù)廊勃。
上面兩個(gè)場(chǎng)景的描述都是針對(duì)延遲即刻恢復(fù)的策略說明,我們可能還需要考慮一種情況就是延遲忽略恢復(fù)策略经窖,也就是針對(duì)上面的場(chǎng)景1和場(chǎng)景2坡垫,當(dāng)B任務(wù)到達(dá)觸發(fā)時(shí)間需要執(zhí)行,但是發(fā)現(xiàn)依賴的父任務(wù)沒有執(zhí)行成功的画侣,這時(shí)候就應(yīng)用延遲忽略恢復(fù)策略冰悠,忽略B任務(wù)的本次執(zhí)行。
任務(wù)基礎(chǔ)信息和關(guān)系信息實(shí)時(shí)變更:任務(wù)基本信息以及上配乱、下游依賴關(guān)系的變更都能立刻生效溉卓。
這里需要注意的是皮迟,實(shí)時(shí)生效再技術(shù)層面需要數(shù)據(jù)的強(qiáng)一致性保證,所以在業(yè)務(wù)功能方面要將影響任務(wù)信息狀態(tài)變化的操作梳理出來的诵。例如任務(wù)的增万栅、刪佑钾、改以及任務(wù)運(yùn)行中的狀態(tài)變化西疤,手動(dòng)觸發(fā)等場(chǎng)景都可能涉及。所以針對(duì)這些操作要使用鎖進(jìn)行互斥處理休溶,分布式環(huán)境下需要使用分布式鎖代赁。
任務(wù)手動(dòng)觸發(fā)執(zhí)行策略:支持手動(dòng)觸發(fā)任務(wù),目前有三種觸發(fā)模式兽掰,觸發(fā)當(dāng)前任務(wù)芭碍、觸發(fā)當(dāng)前任務(wù)及下游子孫,觸發(fā)當(dāng)前任務(wù)的下游和子孫但是不包含當(dāng)前任務(wù)孽尽。
特殊情況流程處理機(jī)制:人工標(biāo)注失敗或狀態(tài)恢復(fù)重置功能窖壕,調(diào)度系統(tǒng)的任務(wù)類型有很多種,例如一個(gè)數(shù)據(jù)抽取任務(wù)依賴于業(yè)務(wù)數(shù)據(jù)庫的穩(wěn)定性杉女,我們不能保證依賴環(huán)境都完全高效可用瞻讽,遇到特殊情況可以將任務(wù)重置狀態(tài),重新進(jìn)行全新的生命周期恢復(fù)執(zhí)行至關(guān)重要熏挎,此功能都是在實(shí)踐中吸取的經(jīng)驗(yàn):)速勇,大家懂的~。
任務(wù)手動(dòng)停止資源釋放:任務(wù)停止并不是簡(jiǎn)單的設(shè)置一下狀態(tài)坎拐,如果任務(wù)是MR烦磁、Sqoop、Hive等類型哼勇,需要將對(duì)應(yīng)在YARN上的任務(wù)停止釋放都伪。
報(bào)警通知機(jī)制:任務(wù)失敗報(bào)警、超時(shí)報(bào)警积担、支持用戶指定時(shí)間查看任務(wù)運(yùn)行狀態(tài)的訂閱功能院溺。
任務(wù)運(yùn)行歷史日志和實(shí)時(shí)日志可視化:日志是觀察任務(wù)執(zhí)行情況和排查問題的重要信息,需要提供給用戶便捷的日志瀏覽功能磅轻,跟蹤任務(wù)執(zhí)行進(jìn)度狀態(tài)珍逸。
任務(wù)信息可視化展現(xiàn):任務(wù)的狀態(tài)信息、上下游關(guān)系方便查看聋溜。
調(diào)度系統(tǒng) 3.0預(yù)告
我們不斷優(yōu)化迭代調(diào)度系統(tǒng)的功能和技術(shù)架構(gòu)谆膳,目前調(diào)度系統(tǒng)3.0已經(jīng)開始研發(fā),主要的改進(jìn)涉及如下方面:
調(diào)度系統(tǒng)多租戶方面:目前調(diào)度系統(tǒng)主要針對(duì)我們自身的數(shù)據(jù)倉庫團(tuán)隊(duì)使用撮躁,其它的業(yè)務(wù)團(tuán)隊(duì)也有需求和意愿進(jìn)行使用漱病,我們將會(huì)用一個(gè)迭代針對(duì)業(yè)務(wù)數(shù)據(jù)的隔離,基礎(chǔ)數(shù)據(jù)隔離,業(yè)務(wù)功能操作隔離杨帽,資源使用隔離方面進(jìn)行研發(fā)演進(jìn)漓穿,實(shí)現(xiàn)多租戶的使用體系注盈。
任務(wù)執(zhí)行策略方面:上面再介紹現(xiàn)有功能的時(shí)候晃危,介紹了任務(wù)延遲策略幾種情況、后續(xù)我們會(huì)根據(jù)業(yè)務(wù)需求老客,針對(duì)這方面做更多的策略支持僚饭,并且實(shí)現(xiàn)界面化的可選擇配置,這樣業(yè)務(wù)同事根據(jù)業(yè)務(wù)場(chǎng)景可以自行選擇胧砰。
技術(shù)架構(gòu)不斷優(yōu)化:調(diào)度系統(tǒng) 3.0此次迭代會(huì)將后臺(tái)公用組件模塊化鳍鸵,無狀態(tài)化,以實(shí)現(xiàn)高可用尉间,負(fù)載均衡等偿乖。
總結(jié)
任務(wù)調(diào)度系統(tǒng)是大數(shù)據(jù)平臺(tái)工具系統(tǒng)核心組件,本文也將我們自身實(shí)現(xiàn)的一些功能特性做了相關(guān)描述哲嘲,后續(xù)我們會(huì)針對(duì)我們自身的大數(shù)據(jù)平臺(tái)贪薪,從工具系統(tǒng)層、核心組件層撤蚊,在功能和技術(shù)實(shí)現(xiàn)方面持續(xù)介紹古掏。