天天看點

[平台建設] Spark任務的診斷調優

本文主要根據平台使用者平常送出的spark任務思考,調研引入Dr. Elephant, 通過閱讀Dr 相關源碼, 明白Dr 執行整體流程并對代碼進行改造,适配我們的需求.最終轉變為平台産品來對使用者的Spark任務進行診斷并給出相關調優建議.

背景

平台目前大多數任務都是Spark任務,使用者在送出Spark作業的時候都要進行的一步動作就是配置spark executor 個數、每個executor 的core 個數以及 executor 的記憶體大小等,這項配置目前基本靠使用者個人經驗,在這個過程中,有的使用者就會設定非常不合理,比如配置的記憶體非常大,實際上任務運作時所占用的記憶體極少. 基于此,希望能有工具來針對任務進行分析,幫助使用者來監控和調優任務,并給出一些建議,使任務更加有效率,同時減少亂配資源影響其他使用者任務運作的情況。

Dr. Elephant介紹

通過調研,發現一個開源項目 Dr. Elephant 基本與想要達成目标一緻。

DR.Elephant 介紹:

Dr. Elephant is a job and flow-level performance monitoring and tuning tool for Apache Hadoop and Apache Spark
           

Dr功能介紹:

https://github.com/linkedin/dr-elephant/wiki/User-Guide

接下來就是需要了解下Dr的架構, 因為我們有些定制化的需求,是以需要了解下架構,以及閱讀源碼進行相關改造适配。

Dr. Elephant 的系統架構如下圖。主要包括三個部分:

資料采集:資料源為 Job History

診斷和建議:内置診斷系統

存儲和展示:MySQL 和 WebUI

[平台建設] Spark任務的診斷調優

Dr.Elephant定期從Hadoop平台的YARN資源管理中心擷取近期所有的任務,這些任務既包含成功的任務,也包含那些失敗的任務。每個任務的中繼資料,例如任務計數器、配置資訊以及運作資訊都可以從Hadoop平台的曆史任務服務端擷取到。一旦擷取到了任務的中繼資料,Dr.Elephant就基于這些中繼資料運作啟發式算法,然後會産生一份該啟發式算法對該任務性能的診斷報告。根據每個任務的執行情況,這份報告會為該任務标記一個待優化的嚴重性級别。嚴重性級别一共分為五級,報告會對該任務産生一個級别的定位,并通過級别來表明該任務中存在的性能問題的嚴重程度。

啟發式算法具體要做的事情就是:

  • 擷取資料
  • 量化計算打分
  • 将分值與不同診斷等級門檻值進行比較
  • 給出診斷等級

源碼解析與改造

首先我們要知道Dr整體的運作流程是怎麼樣的?

[平台建設] Spark任務的診斷調優

因為我們隻需要關注Spark任務,下面主要介紹下Spark名額如何采集?

上面我們已經知道Dr執行的大緻流程, 我們隻采集spark任務, 是以不用太多額外的代碼和抽象.

隻需要關鍵的幾個步驟改造即可:

1.首先還是通過yarn api 擷取執行的job, 我們隻需要對ExecutorJob直接使用org.apache.spark.deploy.history.SparkFSFetcher#fetchData方法, 擷取eventlog, 并對eventlog進行重放解析

  1. 将解析後的資料,擷取相關需要的資訊,直接寫入mysql庫
  2. 因為涉及連接配接hdfs,yarn 等服務,将hdfs-site.xml,core-site.xml等檔案放置配置目錄下
  3. 最終将程式改造成一個main方法直接運作的常駐程序運作

采集後的主要資訊:

  • 采集stage相關名額資訊
  • 采集app任務配置、executor個數、核數等,執行開始時間、結束時間、耗時等

改造後整體流程如下:

[平台建設] Spark任務的診斷調優

規則平台進行配置, 有了采集資料, 根據規則對相關名額定級, 并以不同顔色區分展示,并給出相關診斷意見.

總結

參考

https://engineering.linkedin.com/blog/2016/04/dr-elephant-open-source-self-serve-performance-tuning-hadoop-spark

https://github.com/linkedin/dr-elephant

https://blog.csdn.net/qq475781638/article/details/90247623

本文作者: chaplinthink, 關注領域:大資料、基礎架構、系統設計, 一個熱愛學習、分享的大資料工程師

繼續閱讀