Spark2.1.0——深入淺出度量系統
知識
10-10
對於一個系統而言,首先考慮要滿足一些業務場景,並實現功能。隨著系統功能越來越多,代碼量級越來越高,系統的可維護性、可測試性、性能都會成為新的挑戰,這時監控功能就變得越來越重要了。在國內,絕大多數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 度量系統的工作流程
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※Linux 用戶身份與進程許可權
※golang json.Marshal interface 踩坑
TAG:程序員小新人學習 |