【Dr.Elephant原始碼分析系列文章-1】
Dr.Elephant是LinkedIn於2016年4月開源的一個Hadoop平臺效能調優工具。我們可以從這個連結獲取原始碼:https://github.com/linkedin/dr-elephant。
Dr.Elephant的問世將改變Hadoop/Spark使用者的開發習慣,同時也將大大減少Hadoop平臺開發者和管理者的負擔。可以預見到,在未來較短的一段時間內,Dr.Elephant將會存在於幾乎每個大規模的Hadoop平臺上。LinkedIn內部已經全面推廣並使用Dr.Elephant作為Hadoop/Saprk程式的監控調優工具。在LinkedIn內部,凡是需要上到Production環境執行的Hadoop/Saprk程式,都需要先在測試環境中執行測試,只有當Dr.Elephant對這個程式“亮綠燈”時,才能提交到線上Production環境執行。如果Dr.Elephant對程式有一些調優建議,開發人員需要解決掉這些問題,繼續提交到測試環境中,直到Dr.Elephant對這個程式“亮綠燈”為止。
Dr.Elephant的程式是基於Play框架開發的,使用的開發語言是Java+Scala。如果想對Dr.Elephant原始碼進行學習,建議你先對Play框架有一個基礎的瞭解,這樣會對Dr.Elephant的程式碼組織結構有一個更清晰的認識。下面這個連結是Play框架的官方文件:https://www.playframework.com/documentation。
Dr.Elephant的原始碼結構如下:
app → Contains all the source files
└ com.linkedin.drelepahnt → Application Daemons
└ org.apache.spark → Spark Support
└ controllers → Controller logic
└ models → Includes models that Map to DB
└ views → Page templates
app-conf → Application Configurations
└ elephant.conf → Port, DB, Keytab and other JVM Configurations (Overrides application.conf)
└ FetcherConf.xml → Fetcher Configurations
└ HeuristicConf.xml → Heuristic Configurations
└ JobTypeConf.xml → JobType Configurations
conf → Configurations files
└ evolutions → DB Schema
└ application.conf → Main configuration file
└ log4j.properties → log configuration file
└ routes → Routes definition
images
└ wiki → Contains the images used in the wiki documentation
public → Public assets
└ assets → Library files
└ css → CSS files
└ images → Image files
└ js → Javascript files
scripts
└ start.sh → Starts Dr. Elephant
└ stop.sh → Stops Dr. Elephant
test → Source folder for unit tests
compile.sh → Compiles the application
下面會詳細介紹專案中每個資料夾的內容:
app
app資料夾包含了專案的核心原始碼。這部分的程式碼包含了:MVC的實現(UI部分的頁面和Controller的實現、Model的定義、View頁面的實現),Hadoop/Spark任務收集、分析後臺任務的實現。該目錄中子目錄清晰,顧名思義。其中,Hadoop部分的實現使用的是Java語言,Spark部分的實現使用的是Scala語言。(關於語言選擇上,個人認為,Spark和Scala是絕配,使用Scala在處理Spark產生的歷史事件日誌會更方便)
app-conf
這個資料夾包含了Dr.Elephant用到的一些應用內部的配置。
elephant.conf檔案包含了UI的埠設定、DB連線設定、祕鑰檔案以及JVM引數的設定。
在FetcherConf.xml檔案中,可以配置獲取Hadoop和Spark任務的類,通過這個配置,可以對不同的任務型別指定不同的類去處理。
HeuristicConf.xml檔案定義了每個型別的任務中每個啟發式演算法的類名稱以及顯示名稱。
JobTypeConf.xml檔案定義每種任務的名稱、型別和相關配置。
conf
這個資料夾包含了Play框架中對Dr.Elephant的一些配置。
evolutions檔案定義了MySQL資料庫、表的結構,MySQL會在Dr.Elephant啟動時自動建立完成。
application.conf檔案定義了Play框架的入口類、祕鑰、資料庫驅動以及日誌級別相關的配置。
images
包含了在Wiki文件中用到的圖片。
public
assets資料夾包含了用到的一些類庫檔案。
css資料夾包含了用到的css檔案。
images資料夾包含了用到的一些圖片。
js資料夾中是java script檔案。
scripts
start.sh檔案是Dr.Elephant的啟動指令碼。
stop.sh檔案是Dr.Elephant的停止指令碼。
test
test資料夾包含unit test檔案。
compile.sh
專案編譯指令碼。
在該系列文章中,我們會詳細分析每一部分的程式碼。
作者簡介:屈世超,對高併發系統設計開發感興趣,現專注於大資料開發工作。曾任職小米科技公司服務端後臺開發工程師,現擔任EverString資料平臺組高階開發工程師。