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

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