【Dr.Elephant中文文檔-7】自動調優

  • 2019 年 12 月 26 日
  • 筆記

1.目標

Dr.Elephant這個項目希望構建一個可以自動優化hadoop mapreduce相關函數的調優框架。在這種情況下,是為了函數消耗最少的資源來完成作業。我們還希望在未來的版本將作業時間也作為函數資源消耗的參考指標。我們使用迭代演算法和粒子群優化演算法進行自動調優。這些迭代通過分析作業的多次運行結果來完成,我們已經在15-20次的作業中優化了20-30%的資源。

自動優化從作業的默認參數開始,並且在每次運行之後計算判斷當前參數是否適合,並且根據演算法建議新的參數。為了與Dr.Elephant交互,開發了getCurrentRunParametersAPI,它返回給定作業當前運行的參數。

2.組件

2.1.守護進程

自動調優模組中有以下4個守護進程:

  • 基準線計算:該Daemon通過Dr.Elephant的歷史數據平均值來計算新作業應當消耗的資源和時間
  • 作業完成檢查器:一旦修改了新的調優參數來執行作業,該Daemon將繼續輪詢作業直到完成。對於Azkaban調度器則使用Azkaban rest API
  • 打分器(Fitness Computation Daemon):一旦作業完成(成功/失敗),該Daemon將根據作業消耗的資源和數據大小來評判參數集是否合適
  • 參數生成器(Param Generator):一旦設置好當前的參數集,該Daemon就會生成新的參數建議。目前我們使用PSO演算法進行新的參數建議。

2.2.Rest API

有個getCurrentRunParameters的新API,它從資料庫獲取建議的參數並將其返回。目前,這是外部系統和Dr Elephant之間唯一的自動調優交互。

自動調優的測試版本將支援以下特性:

  • 目前支援Pig Script優化
  • 支援Azkaban調度器
  • 支援全局開啟或關閉自動調優
  • 約束應用參數確保不會因為自動調優而導致作業失敗
  • 如果參數超出允許資源使用/執行時間的限制,則對其進行處罰

我們計劃將在未來的版本支援以下特性:

  • 支援HiveSpark
  • 執行時間優化
  • 改進可視化報告

2.3.用於自動調優的表結構

Table 1: tuning_algorithm這張表用於記錄優化度量資訊(資源,時間)和作業類型(Pig,Hive)的演算法。通常情況下,一種作業類型應該有一種演算法,但框架也支援一行有多種演算法。

Table 2: tuning_parameter此表記錄tuning_algorithm中的每個演算法優化的Hadoop參數。例如mapreduce.map.memory.mbmapreduce.task.io.sort.mb等。

Table 3: flow_definition此表記錄作業流,可以來自任何調度程式,如AzkabanOozieAppworx等。

Table 4: job_definition此表記錄需要優化的作業。還包含除了自動優化資訊之外的一般資訊。作業資訊放在2張表裡,因為並不是所有作業都需要開啟自動調優。

Table 5: tuning_job_definition此表記錄需要優化的作業和僅需要自動調整的資訊。

Table 6: flow_execution此表記錄作業流的執行步驟。

Table 7: job_execution此表記錄作業流中的一次作業。包含自動優化之外的作業執行資訊。作業資訊放在2張表裡,因為並不是所有作業都需要開啟自動調優。

Table 8: tuning_job_execution此表記錄一次作業流的作業,並包含自動調優相關資訊。這次執行對應一組參數。

Table 9: job_saved_state由於優化演算法的內部表。存儲需要優化的作業的當前狀態。

Table 10: job_suggested_param_value記錄一次作業的建議參數值。

周末休息了倆天,整理了一下,dr.elephant基本概念文檔還剩一篇就完結啦,後續會寫一些實戰問題。