隨着公司規模的增加,對大數據的離線應用開發的需求愈來愈多,這些需求包括但不限於離線數據同步(MySQL/Hive/Hbase/Elastic Search 等之間的離線同步)、離線計算(Hive/MapReduce/Spark 等)、定時調度、運行結果的查詢以及失敗場景的報警等等。架構
在統一的大數據開發平臺產生以前,面臨一系列的問題:併發
爲了解決上述遇到的各種問題,同時參考了業界其餘公司的大數據解決方案,咱們設計並實現了大數據開發平臺(Data Platform,簡稱 DP),經過可視化的交互界面,解決離線大數據計算相關的各類環境和工具。負載均衡
本文將介紹 DP 的系統設計以及在有讚的落地狀況,內容包括:框架
圖1 DP系統架構圖運維
大數據開發平臺包括調度模塊(基於開源airflow二次開發)、基礎組件(包括公共的數據同步模塊/權限管理等)、服務層(做業生命週期管理/資源管理/測試任務分發/Slave管理等)和監控(機器資源/日誌/基於預測的監控)。這些模塊具體功能和職責爲:<br/>分佈式
任務調度模塊:支持基於任務優先級的多隊列、分佈式調度。在開源的 airflow 基礎上進行了二次開發,主要新增功能包括:高併發
圖2 DP支持的離線數據同步方式(箭頭表示數據流向)工具
服務模塊:負責做業的生命週期管理,包括做業的建立(修改)、測試、發佈、運維等,服務部署採用 Master / Slave 模式,參考圖3所示。其中oop
圖3 DP 部署圖測試
監控模塊:對調度集羣的機器、資源、調度任務進行全方位的監控和預警。按照監控的粒度和維度分紅三類:
_任務預測監控:_經過提早一段時間模擬任務的調度(不真正的跑任務),來預測任務的開始/結束時間,同時能夠提前知道可能失敗、超時的任務列表,進而在問題發生以前進行規避。
大數據開發平臺的任務調度是指在做業發佈以後,按照做業配置中指定的調度週期(經過 crontab 指定)在一段時間範圍內(經過開始/結束時間指定)週期性的執行用戶代碼。任務調度須要解決的問題包括:
爲了解決上述問題,咱們調研了多種開源框架(Azkaban/Oozie/Airflow等),最終決定採用 Airflow + Celery + Redis + MySQL 做爲 DP 的任務調度模塊,並結合公司的業務場景和需求,作了一些深度定製,給出了以下的解決方案(參考圖4):
圖4 基於Airflow + Celery + Redis + MySQL的任務調度
針對問題4,首先不一樣類型的任務須要耗費不一樣類型的資源,好比 Spark 任務是內存密集型、Datax 任務是 CPU 密集型等,若是將同一類任務集中在一臺機器上執行,容易致使部分系統資源耗盡而另一部分資源空閒,同時若是一臺機器的併發任務數過多,容易引發內存 OOM 以及 CPU 不斷地切換進程上下文等問題。所以咱們的解決方式是:
圖5 調度Worker機器的內存使用狀況
DP項目從2017年1月開始立項開發,6月份正式投入生產,以後通過了N輪功能迭代,在易用性和穩定性方面有了顯著提高,目前調度集羣包括2臺Master和13臺 Slave(調度)節點(其中2臺用於 Scheduler ,另外11臺用於 Worker ),天天支持7k+的任務調度,知足數據倉庫、數據中心、BI、商品、支付等多個產品線的應用。
圖6 DP調度任務數趨勢圖
目前DP支持的任務類型包括:
離線數據同步:
Hadoop 任務:
其餘任務:
DP 在通過一年半的不斷功能迭代和完善以後,目前日均支持7k+的任務調度,同時在穩定性和易用性方面也有了較大的提高,能夠知足用戶平常對大數據離線開發的大部分使用場景。同時咱們也意識到大數據開發這塊還有不少能夠挖掘和提高的點,將來咱們可能會從這些方面進一步完善平臺的功能和提高用戶體驗: