天天看點

OPPO大資料診斷平台“羅盤”正式開源

作者:小風說Fashion

一、背景

OPPO 大資料平台目前有 20+個服務元件,資料量超 1EB,離線任務數近百萬,實時任務數千,資料開發分析師超千人。這也帶來了系統複雜度的問題,一方面是使用者經常對自己的任務運作狀況“摸不着頭腦”,不管是性能問題,還是參數配置問題,甚至是一些常見的權限報錯問題,都需要咨詢平台給出具體的解決方案;另一方面是平台面對各類繁雜任務,運維人員經常需要對任務故障定位和排除,由于任務鍊路長,元件日志多,運維壓力大。是以急需對任務進行實時監控和診斷,不僅要能夠幫助使用者快速定位異常問題,還需給出具體的建議和優化方案,同時還能治理各類“僵屍”和不合理任務,進而達到降本增效的目的。據調研,目前業界尚無成熟的開源任務診斷平台。為此我們開發了大資料診斷平台,通過診斷平台周優化任務執行個體數超 2 萬,取得了良好的效果。

“羅盤”(Compass)便是基于 OPPO 内部大資料診斷平台的開源項目,可用于診斷 DolphinScheduler、Airflow 等排程平台上所運作的大資料任務。我們希望通過“羅盤”(Compass)回饋開源社群,也希望更多人參與進來,共同解決任務診斷的痛點和難題。

二、羅盤核心功能

羅盤目前已支援以下功能和特性:

  • 非侵入式,即時診斷,無需修改已有的排程平台,即可體驗診斷效果。
  • 支援多種主流排程平台,例如 DolphinScheduler、Airflow 或自研等。
  • 支援多版本 Spark、Hadoop 2.x 和 3.x 任務日志診斷和解析。
  • 支援工作流層異常診斷,識别各種失敗和基線耗時異常問題。
  • 支援引擎層異常診斷,包含資料傾斜、大表掃描、記憶體浪費等 14 種異常類型。
  • 支援各種日志比對規則編寫和異常門檻值調整,可自行根據實際場景優化。

羅盤已支援診斷類型概覽:

OPPO大資料診斷平台“羅盤”正式開源

(一)非侵入式,即時診斷

這裡以 DolphinScheduler 排程平台為例。

OPPO大資料診斷平台“羅盤”正式開源

從架構上看,MasterServer 主要負責 DAG 任務切分、任務送出監控并持久化任務執行個體資料到 DB 中,WorkerServer 主要負責任務的執行和提供日志服務,同時在 UI 提供了檢視遠端日志的功能。為了能夠擷取任務中繼資料和相關日志進行診斷,一個方式是在 MasterServer 中監聽任務狀态事件,另一個方式是訂閱 MySQL binlog 日志。為了減少對 DolphinScheduler 的修改,我們采取了第二種方式。

是以隻需要在 DolphinScheduler 建立一個工作流,并運作,等待運作結束,我們便可在羅盤上看到該任務運作失敗等異常。

OPPO大資料診斷平台“羅盤”正式開源

羅盤不但實作了對排程平台的解耦,還能在任務運作結束後即時診斷,同時提供了豐富的 UI 展示服務。如果您不需要我們提供的 UI 服務,那也可以直接查詢羅盤診斷的中繼資料,展示在需要的地方。

(二)工作流層異常診斷

對于工作流層的任務執行個體,常見問題可分為兩類:一類是失敗的任務,例如首次失敗、最終運作失敗和長期失敗;另一類是耗時異常的任務,例如基線時間異常、基線耗時異常和運作耗時長。

  1. 診斷失敗的任務

使用者經常忽略首次失敗,甚至加大重試次數,如果不重視,最終可能會演變為最終失敗。羅盤記錄和診斷分析了每次失敗的原因,不僅可以為使用者快速定位問題,還可以在故障回溯時找到根因。對于長期失敗的任務,需要通知使用者整改或清理,避免造成資源浪費。

OPPO大資料診斷平台“羅盤”正式開源
  1. 診斷耗時異常的任務

針對需要 SLA 保障的任務,羅盤不僅分析了相對于曆史正常結束時間,是否提前結束或者晚點結束的任務,即基線時間異常,也分析了相對于曆史正常運作時長,是否運作時間過長或者過短的任務,即基線耗時異常。對于運作耗時長的任務,例如超過幾個小時以上的大任務,使用者和平台都需要分析是任務本身的問題,還是平台的問題。

OPPO大資料診斷平台“羅盤”正式開源

(三)Spark 引擎層異常診斷

對于 Spark 任務,常見的問題可以歸為三類:一類是運作時報錯,另一類是運作時效率,最後一類是資源使用率問題。

OPPO大資料診斷平台“羅盤”正式開源
  1. 診斷運作時報錯異常

引擎層常見報錯有 sql 失敗、shuffle 失敗和記憶體溢出等。此類報錯具有明顯的日志特征,可根據關鍵字提取分類,使用已有的知識庫,提供給使用者具體的解決方案,提升使用者體驗和效率。

羅盤提供了 sql 失敗日志分析的規則,通常涉及到操作權限,庫表不存在及文法等問題,此類問題可直接指引使用者去申請權限。

OPPO大資料診斷平台“羅盤”正式開源

shuffle 問題會嚴重影響任務運作甚至導緻失敗,需要重點關注,如果您目前沒有更好的解決方案,也可以參考 OPPO 開源的高性能遠端 shuffle 服務。

OPPO大資料診斷平台“羅盤”正式開源

記憶體溢出也是經常導緻任務失敗的一大問題,可提取關鍵日志診斷分析并建議使用者優化記憶體配置參數。

OPPO大資料診斷平台“羅盤”正式開源

除了以上問題,羅盤還提供了 40+的日志識别規則及建議,也可自行根據實際場景擴充識别規則。

  1. 診斷運作時效率異常

如果任務執行耗時較長或者突然變慢,使用者直接在排程平台無法判斷是任務自身問題,還是排程平台問題,亦或是計算引擎的問題。為了排查 Spark 引擎,一般需要專業分析 SparkUI,比較不直覺。羅盤對影響引擎執行效率的問題做了全面的檢測,覆寫大表掃描,資料傾斜,Task 長尾,全局排序,OOM 風險,Job/stage 耗時異常,HDFS 卡頓,推測執行 Task 過多等問題。

  • 大表掃描

羅盤對執行的 SQL 掃描表行數,直覺呈現在表格中。如果使用者沒有進行分區條件篩選,可能會發生全表掃描,需要提醒使用者優化 SQL,避免導緻記憶體溢出和影響叢集,以提升運作效率。

OPPO大資料診斷平台“羅盤”正式開源
  • 資料傾斜

羅盤檢測每個 Task 的資料處理量并判斷資料是否傾斜。當資料傾斜時,可能會導緻任務記憶體溢出,計算資源使用率低,作業執行時間超出預期。

OPPO大資料診斷平台“羅盤”正式開源
  • Task 長尾

羅盤檢測所有 Task 的耗時,并按 Stage 呈現在柱狀圖中,友善使用者判斷是哪個 Stage 執行耗時異常。形成的原因一般是讀取資料過多或讀取資料慢。如果是資料傾斜造成讀取資料過多,則按資料傾斜方式處理。如果同時 HDFS 發生卡頓,則會導緻讀取資料慢,則需要排查叢集問題。

OPPO大資料診斷平台“羅盤”正式開源
  • 全局排序異常

使用者經常在 SQL 中使用了排序函數卻不加分區限制,會導緻全局排序。如果隻有一個 Task 處理資料,需要建議使用者重新分區,避免造成資源浪費和影響運作效率。

OPPO大資料診斷平台“羅盤”正式開源
  • OOM 預警分析

羅盤檢測執行 SQL 廣播記憶體占比,當廣播資料過大,會導緻 driver 或 executor 出現 OOM 風險,需要提醒使用者禁用廣播或取消強制廣播,必要時申請增加記憶體。

OPPO大資料診斷平台“羅盤”正式開源
  • Job/stage 耗時異常

羅盤計算每個 Job/stage 實際計算時間和空閑時間,一般是資源不足時出現,需要關注叢集資源問題。

OPPO大資料診斷平台“羅盤”正式開源
  • HDFS 卡頓

當出現 HDFS 卡頓時,會影響 Task 讀取資料速率,進而影響執行效率,需要關注 HDFS 叢集運作狀态。

OPPO大資料診斷平台“羅盤”正式開源
  • 推測執行 Task 過多

推測執行(speculative)是指作業執行單元 Task 在同一個 Stage 中的執行時間相比其他 Task 執行時間長,在其他 Executor 發起相同 Task 執行,先完成的 Task 将 Kill 另個 Task, 并取得結果。需要關注叢集運作狀态。

OPPO大資料診斷平台“羅盤”正式開源
  1. 診斷資源使用率異常

對于使用者不确定任務 CPU 和記憶體使用情況,不知道怎麼申請多大規格資源的問題,羅盤直覺呈現了 CPU 和記憶體使用占比,友善使用者優化資源配置參數,以節約資源成本。

OPPO大資料診斷平台“羅盤”正式開源
OPPO大資料診斷平台“羅盤”正式開源

羅盤還提供了 GC 日志分析功能,可檢視執行過程 GC 是否存在性能問題。

OPPO大資料診斷平台“羅盤”正式開源

(四)一鍵診斷、報告總覽等功能

除了以上功能,我們還提供了一鍵診斷的功能,為使用者提供詳細的診斷報告。同時還有報告總覽資料和白名單功能等。

OPPO大資料診斷平台“羅盤”正式開源
OPPO大資料診斷平台“羅盤”正式開源

三、羅盤技術架構

羅盤主要由同步工作流層任務中繼資料子產品、同步 Yarn/Spark App 中繼資料子產品、關聯工作流層/引擎層 App 中繼資料子產品、工作流任務異常檢測子產品,引擎層異常檢測子產品,Portal 展示子產品組成。

整體架構圖

OPPO大資料診斷平台“羅盤”正式開源

整體架構分 3 層:

  • 第一層為對接外部系統,包括排程器、Yarn、HistoryServer、HDFS 等系統,同步中繼資料、叢集狀态、運作環境狀态、日志等到診斷系統分析;
  • 第二層為架構層,包括資料采集、中繼資料關聯&模型标準化、異常檢測、診斷 Portal 子產品;
  • 第三層為基礎元件層,包括 MySQL、Elasticsearch、Kafka、Redis 等元件。

具體子產品流程階段:

(1)資料采集階段:從排程系統将使用者、DAG、作業、執行記錄等工作流中繼資料同步至診斷系統;定時同步 Yarn ResourceManager、Spark HistoryServer App 中繼資料至診斷系統,标志作業運作名額存儲路徑,為後續資料處理階段作基礎;

(2)資料關聯&模型标準化階段:将分步采集的工作流執行記錄、Spark App、Yarn App、叢集運作環境配置等資料通過 ApplicationID 媒體進行關聯,此時,工作流層與引擎層中繼資料已關聯完畢,得到資料标準模型 (user, dag, task, application, clusterConfig, time);

(3)工作流層&引擎層異常檢測階段:至此已經獲得資料标準模型,針對标準模型進一步 Workflow 異常檢測流程,同時平台維護着一套沉澱多年的資料治理知識庫,加載知識庫到标準模型,通過啟發式規則,對标準模型的名額資料、日志同時進行異常挖掘,結合叢集狀态及運作是環境狀态,分析得出工作流層、引擎層異常結果;

OPPO大資料診斷平台“羅盤”正式開源

(4)業務視圖:存儲、分析資料,提供給使用者任務概覽、工作流層任務診斷、引擎層作業 Application 診斷,工作流層展示排程器執行任務引發的異常,如任務失敗、回環任務、基線偏離任務等問題,計算引擎層展示 Spark 作業執行引發的耗時、資源使用、運作時問題;

OPPO大資料診斷平台“羅盤”正式開源

四、DolphinScheduler & Compass

DolphinScheduler 是一個分布式和可擴充的開源工作流協調平台,具有強大的 DAG 可視化界面,有着豐富的使用場景,提供 Spark、Hive 和 Flink 等 30+種類型的任務,可靠性高和拓展性強。DolphinScheduler 經曆了多年的實踐和積累,已經成為了一個成熟的開源項目,并有着廣泛的使用者群體。

(一)部署體驗

這裡我們以 DolphinScheduler(2.0.6 版本)為例,體驗如何快速內建羅盤。如果你還沒有部署 DolphinScheduler,可參考官網部署指南。如果你已經在使用 DolphinScheduler,那麼隻需要部署羅盤即可。羅盤支援單機和叢集部署,如果你想要快速體驗羅盤的功能,可使用單機部署模式,羅盤依賴 Kafka、Redis、zookeeper 和 ElasticSearch,需要提前安裝,依賴服務完成後即可通過部署腳本進行羅盤部署:

  1. 代碼編譯
OPPO大資料診斷平台“羅盤”正式開源
  1. 修改配置
OPPO大資料診斷平台“羅盤”正式開源
OPPO大資料診斷平台“羅盤”正式開源
  1. 一鍵部署
OPPO大資料診斷平台“羅盤”正式開源

(二)使用示例

首先在 DolphinScheduler 建立好項目,

OPPO大資料診斷平台“羅盤”正式開源

然後建立一個 SPARK 任務的工作流,

OPPO大資料診斷平台“羅盤”正式開源

最後上線該任務和運作。

OPPO大資料診斷平台“羅盤”正式開源

打開羅盤 Web UI,預設路徑為-,輸入 DolphinScheduler 的賬号密碼,羅盤自動同步了 DolphinScheduler 使用者資訊。

OPPO大資料診斷平台“羅盤”正式開源

最後進入任務運作頁面,便可以看到所有的異常任務診斷資訊。

OPPO大資料診斷平台“羅盤”正式開源

五、羅盤開源規劃

  • 羅盤主要圍繞離線排程任務、計算引擎兩個方面對問題進行定位分析,使用豐富的知識庫,提供給使用者解決優化方案,同時達到降本增效的目的。
  • 目前已開源部分主要包含對任務工作流和 Spark 引擎層的問題診斷,不久将釋出針對 Flink 任務的異常和資源問題診斷。
  • 未來将引入更深層次的算法和診斷模型,實作去規則和門檻值,使異常診斷更加智能化。

六、參與貢獻

Github項目名稱:cubefs/compass

歡迎參與貢獻,如果您有需求或建議可以提 issue 到 Github,我們将及時為您解答。

關于安第斯智能雲

OPPO 安第斯智能雲(AndesBrain)是服務個人、家庭與開發者的泛終端智能雲,緻力于“讓終端更智能”。作為 OPPO 三大核心技術之一,安第斯智能雲提供端雲協同的資料存儲與智能計算服務,是萬物互融的“數智大腦”。