1. 程式人生 > >Spark2.1.0——深入淺出度量系統

Spark2.1.0——深入淺出度量系統

對於一個系統而言,首先考慮要滿足一些業務場景,並實現功能。隨著系統功能越來越多,程式碼量級越來越高,系統的可維護性、可測試性、效能都會成為新的挑戰,這時監控功能就變得越來越重要了。在國內,絕大多數IT公司的專案都以業務為導向,以完成功能為目標,這些專案在立項、設計、開發、上線的各個階段,很少有人會考慮到監控的問題。在國內,開發人員能夠認真的在程式碼段落中列印日誌,就已經屬於最優秀的程式設計師了。然而,在國外的很多專案則不會這樣,看看久負盛名的Hadoop的監控系統就可見一斑,尤其是在Facebook,更是把功能、日誌以及監控列為同等重要,作為一個合格工程師的三駕馬車。

         Spark作為優秀的開源系統,在監控方面也有自己的一整套體系。一個系統有了監控功能後將收穫諸多益處,如可測試性、效能優化、運維評估、資料統計等。Spark的度量系統使用codahale提供的第三方度量倉庫Metrics,本節將著重介紹Spark基於Metrics構建度量系統的原理與實現。對於Metrics感興趣的讀者,可以參考閱讀《

附錄D Metrics簡介》中的內容。

         Spark的度量系統中有三個概念:

  • Instance:指定了度量系統的例項名。Spark按照Instance的不同,區分為Master、Worker、Application、Driver和Executor;
  • Source:指定了從哪裡收集度量資料,即度量資料的來源。Spark提供了應用的度量來源(ApplicationSource)、Worker的度量來源(WorkerSource)、DAGScheduler的度量來源(DAGSchedulerSource)、BlockManager的度量來源(BlockManagerSource)等諸多實現,對各個服務或元件進行監控。
  • Sink:指定了往哪裡輸出度量資料,即度量資料的輸出。Spark中使用MetricsServlet作為預設的Sink,此外還提供了ConsoleSink、CsvSink、JmxSink、MetricsServlet、GraphiteSink等實現。

為了更加直觀的表現上述概念,我們以圖1來表示Spark中度量系統的工作流程。

度量系統的工作流程
圖1 度量系統的工作流程

今後將繼續提供博文對以下內容進行詳細介紹:

關於《Spark核心設計的藝術 架構設計與實現》

經過近一年的準備,《Spark核心設計的藝術 架構設計與實現》一書現已出版發行,圖書如圖:

紙質版售賣連結如下: