LinkedIn開源Dr. Elephant:Hadoop和Spark性能監(jiān)控工具
我們今天很榮幸的宣布項目Dr.Elephant的開源,這是一個強大的工具,可以幫助Hadoop和Spark用戶理解、分析、以及改善系統(tǒng)的性能。在去年的Hadoop第八次年度峰會(一個Apache Hadoop社區(qū)的重要會議)期間,我們***次將Dr. Elephant在社區(qū)面前展示。
我們的動機
Hadoop是用于大型分布式存儲及計算的框架,同時其生態(tài)圈中引入了大量彼此相互作用的部件。由于其龐大而復雜的框架,確保每一個部件都高效執(zhí)行是非常重要的。雖然我們總能優(yōu)化底層的硬件資源、網絡基礎設施、操作系統(tǒng),以及整個系統(tǒng)的其它部分,但只有用戶才能優(yōu)化集群上執(zhí)行的任務。
Dr.Elephant的誕生
為了幫助用戶了解和優(yōu)化他們自己的流程,我們定期進行培訓來告訴他們如何優(yōu)化自己的任務,但這并沒有真正解決我們的問題。在LinkedIn ,我們有不同Hadoop使用經驗的員工使用不同的技術在集群中運行他們的任務。此外, Hadoop的用戶數(shù)量不斷增加。這意味著,針對不同的用戶、不同的技術進行常規(guī)的培訓變的越來越難,而且這樣的工作根本不具備良好的擴展性。
直到幾年前,LinkedIn的Hadoop團隊開始代替員工進行工作流分析,并給出任務的優(yōu)化建議。作為優(yōu)化工作的***步,基于一些簡單規(guī)則,我們給予用戶一些建議,并取得了明顯的優(yōu)化效果。但是,隨著用戶的增加,由于用戶參與總會有些延遲,使得我們越來越難提供足夠的支持資源。沒有辦法驗證我們是否達到了任務性能的優(yōu)化目標或者保證性能優(yōu)化方向的全覆蓋。因此,我們需要一個標準化和自動化的過程。
Hadoop的專家們審查流程時發(fā)現(xiàn)幾個常見的經常性的優(yōu)化模式,并在此基礎上,我們決定開始一個新的實驗項目,同時優(yōu)化Hadoop平臺開發(fā)者和Hadoop使用者的時間。這就是Dr.Elephant的誕生過程。
什么是Dr.Elephant
Dr.Elephant是Hadoop和Spark性能監(jiān)控和調優(yōu)工具。它會自動收集所有的指標,針對指標執(zhí)行分析任務,并用簡易的方式將其展示出來。它的目標是提高開發(fā)人員的工作效率,簡化任務調優(yōu)工作以更好的提高集群性能。它使用一組可插拔、可配置、基于規(guī)則的啟發(fā)式(heuristics)來分析Hadoop和Spark任務并給出關于任務性能的詳細報告信息,然后,基于該結果給出如何讓任務執(zhí)行得更為有效建議。
為何要使用Dr.Elephant
大多數(shù)Hadoop的優(yōu)化工具,無論是開源還是專有的,旨在收集系統(tǒng)資源指標和監(jiān)控集群資源。他們專注于簡化Hadoop集群的部署和管理。很少有工具專注于幫助Hadoop用戶優(yōu)化他們的任務??捎玫哪菐讉€要么不活躍,要么不能擴展并支持不斷增長的Hadoop框架。Dr.Elephant支持Hadoop,并且可以很容易地擴展到新的框架。它也支持Spark。您可以加入、配置任意多的自定義啟發(fā)式(heuristics)。它的目的是幫助Hadoop和Spark的用戶了解他們的任務內部執(zhí)行情況,并幫助他們很容易的優(yōu)化自己的任務。
Dr.Elephant是如何工作的
Dr.Elephant以固定的間隔,從Yarn的Resource Manager獲取所有最近成功和失敗的應用程序列表。從JobHistory獲取每個應用的元數(shù)據(jù) - 即,counter,配置和任務數(shù)據(jù)。一旦它擁有所有的元數(shù)據(jù),Dr.Elephant便運行一組啟發(fā)式(heuristics),并產生對單個啟發(fā)式和任務整體性能的診斷報告。然后,報告中用五個嚴重性級別來標記不同的結果,以表明潛在的性能問題。
Dr.Elephant儀表盤
啟動Dr.Elephant的UI之后,儀表盤將被加載起來。這將顯示幾組集群統(tǒng)計數(shù)據(jù),比如集群上有多少作業(yè)在執(zhí)行,需要做性能調優(yōu)的作業(yè)數(shù)量,以及基于啟發(fā)式分析結果顯示的處于嚴重(critical)狀態(tài)的任務數(shù)量。從下面這些數(shù)字,你可以看到在過去24小時內所有由Dr.Elephant分析的任務。
Dr.Elephant的搜索頁面
Dr.Elephant具有搜索功能,允許用戶根據(jù)任務/應用程序ID、流程執(zhí)行ID、作業(yè)提交者信息、任務的類型(Pig、Hive等)、作業(yè)的嚴重程度、具體的某個啟發(fā)式指標的嚴重程度、以及作業(yè)完成的時間來搜索任務。
當你點擊一個特定的搜索結果,您可以查看任務的完整信息。該信息頁面給出了具體MapReduce或Spark作業(yè)的詳細信息。它包括對用戶有用的啟發(fā)式指標以及一些統(tǒng)計數(shù)據(jù)。此外,你可以獲取任務的真實身份信息,如工作流的引用、作業(yè)引用和作業(yè)歷史記錄服務器的引用。它還提供方便的鏈接,用來查看作業(yè)的歷史以及給定作業(yè)流中所包含的所有作業(yè)的信息。
Dr.Elephant的任務頁面
Dr.Elephant中的一個工作流歷史查看頁

Dr.Elephant中的任務歷史查看
除了對單個任務的報告,Dr.Elephant的任務和工作流歷史記錄頁面還提供了任務的執(zhí)行歷史展示,以幫助您將某次特定的執(zhí)行與之前的執(zhí)行進行比較。它基于所有啟發(fā)式嚴重性計算每次執(zhí)行的得分并以圖表和曲線圖方式展現(xiàn)。該圖將有助于分析為什么相比于其他執(zhí)行,某次特定的任務執(zhí)行性能較差。對于圖中的每一個點,它也將列出需要注意的排在前三的任務(Job)或任務階段(Stage)。每一個色點代表了任務流頁面中的一個任務,以及任務歷史頁面中的一個啟發(fā)式指標,而顏色代表指標的嚴重性。當鼠標懸停在這些點上時,你可以獲取各個作業(yè)/啟發(fā)式指標的更多信息。
Dr.Elephant的專家技能
Dr.Elephant自2014年年中誕生開始,經過不斷的演進,已經包括基于專家建議和意見的許多有用功能。廣義地說,這里是Dr.Elephant的技能和能力的列表:
- 可插拔和可配置的基于規(guī)則的啟發(fā)式指標,用于診斷任務;
- 與Azkaban調度器開箱即用式的集成,同時支持添加任何其它的Hadoop調度器,比如Oozie;
- 對任務及任務流的歷史性能的展示;
- 任務流中,任務級別的對比;
- 對于MapReduce和Spark的啟發(fā)式指標診斷;
- 很容易擴展到新的任務類型、應用和調度;
- 采用REST API獲取所有信息。
家庭醫(yī)生
Dr.Elephant在LinkedIn非常流行,人們喜歡它的簡單。就像一個家庭醫(yī)生,總是隨叫隨到,通過簡單的診斷可以解決大約80%的問題。它的設計是不言自明的,著眼于通過提供任務級別的建議而不是集群級別的統(tǒng)計信息,幫助Hadoop的用戶了解和優(yōu)化他們的任務流。像一個真正的醫(yī)生診斷問題一樣,Dr.Elephant通過簡單的流程圖分析問題。只要你喜歡,你可以往Dr.Elephant中添加任意多的啟發(fā)式或規(guī)則。
我們使用Dr.Elephant完成許多不同的任務,包括監(jiān)測任務流如何在群集上執(zhí)行,理解為什么一個任務流運行緩慢,知道可以調整什么參數(shù)以及如何改善一個任務流,將一個任務流與先前的執(zhí)行進行比較,故障排除,等等。其他還有些工具使用Dr.Elephant的REST API生成有用的報告。例如,一個工具,用Dr.Elephant對任務流進行性能評估,最終決定其是否可以在生產集群上線執(zhí)行。
Dr.Elephant已經徹底融入了我們的Hadoop生態(tài)系統(tǒng)。在LinkedIn,我們對開發(fā)人員做了強制要求,將Dr.Elephant作為其開發(fā)周期的一部分。在將一個任務流提交到生產環(huán)境之前必須從Dr.Elephant得到一個綠色的結果。對于任何的用戶問題,我們首先使用Dr.Elephant測試并得到一個報告。這鼓勵用戶不斷優(yōu)化自己的任務,并設法使任務在Dr.Elephant中測試時能獲得綠色結果。Dr.Elephant已經成為LinkedIn文化的一部分,并一直在幫助大家。
接下來
許多新功能都計劃采用Dr.Elephant。我們正在不斷尋找新的想法,以幫助提高開發(fā)人員的工作效率,提高集群使用效率。除了添加和改進啟發(fā)式和支持更多的任務類型,在計劃中的更新包括:
- 基于實時指標的具體任務調優(yōu)建議;
- 集群資源使用情況和趨勢的可視化;
- 更好地與Spark集成;
- 整合更多的調度器。
代碼和文檔
Dr.Elephant是Apache v2協(xié)議下的開源項目。你可以在我們的GitHub頁面中找到源代碼和文檔。
我們?yōu)镈r.Elephant建立了一個Google Group,在那里你可以進行查詢和討論想法。當然,捐款和建議也是非常歡迎的。