Dr.Elephant開發者指南
建立Dr.Elephant專案
獲取原始碼
編譯程式碼
Dr.Elephant專案基於Play框架開發,所以開發Dr.Elephant專案的第一步就是安裝Play框架。可以在下面這個連結下載到最新版本的Play框架:https://www.playframework.com/download。安裝Play框架之後,一定要將play命令新增到環境變數$PATH中。
執行編譯指令碼,就可以對Dr.Elephant專案進行編譯。編譯過以後,會在zip資料夾中生成一個zip包。在執行編譯命令時,可以選擇帶一個引數選項來指明編譯的配置檔案。在這個配置檔案中,可以指定Hadoop或者Spark的版本資訊。在不指定的情況下,預設的配置是Hadoop2.3.0以及Spark1.4.0 。在配置檔案中除了可以指定以上兩個版本資訊外,還可以通過play_opts引數來指定play/sbt的選項。
$> ./compile.sh [./app-conf/compile.conf]
$> cat compile.conf
輸出是:
hadoop_version = 2.3.0 // The Hadoop version to compile with
spark_version = 1.4.0 // The Spark version to compile with
play_opts="-Dsbt.repository.config=app-conf/resolver.conf" // Other play/sbt options
以上的三個引數如果沒有通過配置檔案指定,預設就會使用上面列舉出的預設值。如果想指定一個固定的倉庫,可以通過設定sbt.repository.config 為resolver檔案的位置來實現,如上面所示即可。
測試Dr.Elephant
啟動單元測試
呼叫編譯指令碼,就會執行所有的單元測試程式。
本地部署測試Dr.Elephant
準備工作
Yarn和Hadoop/Spark
在本地部署Dr.Elephant之前,先要在本地安裝Hadoop和Spark(Yarn模式),而且要確保資源管理器(Resource Manager)和歷史任務服務(Job History Service)程式的正確執行。關於Yarn上MapReduce任務的偽分散式模式可以參考
指定環境變數HADOOP_HOME:
$>export HADOOP_HOME=/path/to/hadoop/home
$>export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
將Hadoop的Home目錄新增到系統環境變數,Dr.Elephant會使用到Hadoop的Classpath中的某些Class檔案。
$>export PATH=$HADOOP_HOME/bin:$PATH
資料庫
Dr.Elephant需要將任務資訊和任務的診斷資訊儲存在本地資料庫MySQL中。
。Dr.Elephant目前只支援MySQL5.5以上的版本。在MySQL中建立一個數據庫,名稱為drelephant
$> mysql -u root -p
mysql> create database drelephant
在Dr.Elephant的配置檔案app-conf/elephant.conf中可以配置資料庫的url、資料庫名稱、使用者名稱稱和密碼。
使用其他資料庫
目前,Dr.Elephant預設是用MySQL資料庫。我們可以在演化檔案(evolution files)中看到MySQL的DDL宣告。如果我們希望能夠使用其他的資料庫,可以參考這裡進行配置。
本地安裝Dr.Elephant
完成上面的安裝前準備之後,可以開始在本地安裝Dr.Elephant。
執行Hadoop,並執行Hadoop歷史任務服務。
$> $HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
編譯Dr.Elephant專案,生成分散式部署的包。進入專案中的dist資料夾,這個資料夾包含了需要進行分散式部署的zip包。使用unzip命令將zip包解包,然後修改dr-elephant的釋出目錄。以後的描述中,我們都用DR_RELEASE來表示dr-elephant的釋出目錄。
$>cd dist; unzip dr-elephant*.zip;cd dr-elephant*
建立完資料庫之後,首次執行Dr.Elephant時,需要啟動演化功能(evolution)。啟動演化功能時,可以在elephant.conf配置檔案中引數jvm_props新增(或者將對jvm_props的註釋符去掉)-Devolutionplugin=enable -DapplyEvolutions.default=true。
$> vim ./app-conf/elephant.conf
jvm_props=" -Devolutionplugin=enabled -DapplyEvolutions.default=true"
啟動Dr.Elephant時,執行start.sh指令碼,並在引數中帶上應用程式的配置檔案目錄。
$> $DR_RELEASE/bin/start.sh $DR_RELEASE/../../app-conf
如果需要停止Dr.Elephant,執行:
$> $DR_RELEASE/bin/stop.sh
當Dr.Elephant執行成功之後,可以通過”ip:port”(localhost:8080)在瀏覽器中開啟UI。
Dr.Elephant的日誌預設輸出到dr-elephant釋出目錄的同級目錄dist中。
$> less $DR_RELEASE/../logs/elephant/dr_elephant.log
專案結構
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
啟發式演算法
針對MapReduce和Spark,Dr.Elephant已經實現了一系列的啟發式演算法。如果想對啟發式演算法進行更深入的瞭解,請閱讀“啟發式演算法指南”部分。所有的啟發式演算法都是外掛式的,可以簡單的配置使用。
新增新的啟發式演算法
我們可以按照下面的步驟去新增自定義的啟發式演算法,並把它新增到Dr.Elephant中。
- 建立新的啟發式演算法,並完成測試。
- 為該啟發式演算法建立一個新的view頁,例如helpMapperSpill.scala.html。
- 在HeuristicConf.xml檔案中新增該啟發式演算法的詳情。
- HeuristicConf.xml檔案中啟發式演算法的詳情包含以下內容:
i. 應用程式型別:是mapreduce程式還是spark程式。
ii. 啟發式演算法名稱。
iii. 類名稱:類名的全稱。
iv. view頁的名稱
v. 該啟發式演算法適用的Hadoop版本號
5. 啟動Dr.Elephant,就包含了新的啟發式演算法
HeuristicConf.xm檔案示例:
<heuristic>
<applicationtype>mapreduce</applicationtype>
<heuristicname>Mapper GC</heuristicname>
<classname>com.linkedin.drelephant.mapreduce.heuristics.MapperGCHeuristic</classname>
<viewname>views.html.help.mapreduce.helpGC</viewname>
</heuristic>
配置啟發式演算法
每個啟發式演算法都有一些閾值,用來計算不同的待優化等級。我們可以在HeuristicConf.xml檔案中指定這些閾值。
下面給出一個例子,介紹如何指定啟發式演算法的閾值:
<heuristic>
<applicationtype>mapreduce</applicationtype>
<heuristicname>Mapper Data Skew</heuristicname>
<classname>com.linkedin.drelephant.mapreduce.heuristics.MapperDataSkewHeuristic</classname>
<viewname>views.html.help.mapreduce.helpMapperDataSkew</viewname>
<params>
<num_tasks_severity>10, 50, 100, 200</num_tasks_severity>
<deviation_severity>2, 4, 8, 16</deviation_severity>
<files_severity>1/8, 1/4, 1/2, 1</files_severity>
</params>
</heuristic>
分數計算
在Dr.Elephant中,使用啟發式演算法來分析執行完成的任務,會得到一個分數。這個分數的計算方法比較簡單,可以通過將待優化等級的值乘以作業(task)數量。
int score =0;
if (severity != Severity.NONE&& severity!= Severity.LOW) {
score = severity.getValue()* tasks;
}
return score;
Dr.Elephant可以計算不同任務型別的得分:
作業分數:所有作業的待優化等級數值之和
任務分數:該任務中所有的作業分數之和
任務流分數:該任務流中所有的任務分數之和
作者簡介:屈世超,對高併發系統設計開發感興趣,現專注於大資料開發工作。曾任職小米科技公司服務端後臺開發工程師,現擔任EverString資料平臺組高階開發工程師。
相關推薦
Dr.Elephant開發者指南
建立Dr.Elephant專案 獲取原始碼 編譯程式碼 Dr.Elephant專案基於Play框架開發,所以開發Dr.Elephant專案的第一步就是安裝Play框架。可以在下面這個連結下載到最新版本的Play框架:https://www.playframework.co
Dr.Elephant部署指南
系統環境要求 Dr.Elephant通過Yarn的資源管理器和歷史任務服務來獲取任務的詳細資訊。Dr.Elephant對歷史任務進行分析,然後把分析結果儲存到後臺的資料庫中,Dr.Elephant預設使用MySQL資料庫。在執行Dr.Elephant之前,必須安裝MySQL
開源Android容器化框架Atlas開發者指南
隨著手機淘寶業務的快速增長,協作研發團隊的不斷擴大,技術也面臨著更多挑戰:一方面程式碼量快速上升導致方法過多,限制打包的正常輸出;另一個方面各業務線的開發和整合都需要到一個 apk上,業務間相互耦合嚴重,整合開發工作效率低下,這個大背景下,急需要做一次從構建,整合,交付的技術
dr.elephant啟發式演算法詳解
Metrics測量指標 1. Used Resources Job使用資源的數量,單位是:GB Hours 計算方式 我們將任務的資源使用定義為:所有mapper任務和所有reducer任務的資源使用的總和。 例如: 有如下的job: 4 mappers wit
Flume 1.8.0 開發者指南-個人翻譯版
(為了方便學習利用週末翻譯出來的,現在拿出來和大家免費分享,歡迎轉載,但請尊重我個人的勞動成果,請標明來源) (歡迎在評論中交流。如果覺得我翻譯的還可以歡迎讚美和鼓勵,如果發現了翻譯不當之處也歡迎您無須客氣的指出。謝謝!) 介紹 概覽 Apache Flume 是一個
Apache Velocity開發者指南–導讀
原文連結 譯者:小村長 Velocity–導讀 本專案是 Apache Velocity官方文件的中文翻譯版,Velocity類似與Jsp,是一種基於Java的模板引擎。它可以在web頁面中引用java程式碼定義的資料和物件,而Velocity的作用就是Web檢視和java程式碼進行組裝在
《Apache Velocity開發者指南》
歡迎各位光臨併發程式設計網,併發網最近幾年一直致力於翻譯優秀的技術文章,從未間斷,併發網從本月開始計劃組織翻譯各個技術框架的官方指南,本月組織翻譯Apache Velocity官方指南。Velocity是在阿里巴巴和支付寶等公司被廣泛使用的一種基於Java的模板引擎,有興趣翻譯的同學請在評論中
Dr. Elephant大象醫生安裝文件
Dr.Elephant被定位成一個對Hadoop和Spark任務進行效能監控和調優的工具,它能夠自動收集Hadoop平臺所有的度量標準,並對收集的資料進行分析,並將分析結果以一種簡單且易於理解的形式展示出來。Dr.Elephant的設計目的是通過它對任務的分析結果
(5)高通AP10.4開發者指南——WLAN(1.5 WLAN驅動模組化的一些其他修改)
1.5 WLAN驅動模組化的一些其他修改 從QCA_Networking_2016.SPF.4.0版本開始,OL和DA驅動相互獨立,並新建了一個UMAC模組,作為通用層,並獨立於OL和DA的模組。 因為DA驅動已經獨立於“UMAC+OL”驅動結構,所以將UM
(8)高通AP10.4開發者指南——WLAN(2.2 上下文及同步處理)
2.2 上下文及同步處理 WLAN驅動在不同的上下文處理中執行,比如 ISR上下文 Softirq(軟中斷)/tasklet(核心軟中斷延遲機制)上下文 Process(程序)上下文 2.2.1 ISR處理 WLAN裝置成功附著之後(ath_atta
(2)高通AP10.4開發者指南——WLAN(1.2 WLAN軟體架構)
1.2 WLAN軟體架構 WLAN驅動層被封裝成數個部分,每個部分都提供了API,方便使用者定製自己的AP軟體和進行二次開發。 圖1-3 WLAN軟體整體架構說明 1.2.1 硬體抽象層(HAL) 硬體抽象層(HAL)是驅動和硬體晶片之間的連線部
比特幣開發者指南(6)--錢包
錢包 比特幣錢包可以指代錢包程式或錢包檔案。電子錢包程式建立公共金鑰接收satoshis,並使用相應的私鑰花費satoshis 。電子錢包檔案儲存私鑰和(可選的)與錢包程式的交易相關的其他資訊。 錢包程式和錢包檔案在下面的不同小節中介紹,本文件試圖澄清我們在談論是錢包程式或
比特幣開發者指南(8)--支付流程
支付流程 支付流程包括消費者和接收者為了交換產品或服務而做出和接受付款的步驟。從商業啟蒙開始,基本步驟並沒有改變,但技術在改變。本節將介紹接收者和消費者如何分別使用比特幣來請求和付款,以及如何處理諸如退款和迴圈付費等複雜情況。 Bitcoin Payment Process
(1)高通AP10.4開發者指南——WLAN(1.1 Wireless LAN簡介)
1 AP軟體架構 高通Atheros AP軟體主要的組成部分包括Wireless LAN(無線區域網)、Ethernet(乙太網)、Router Stack(路由協議棧)、Hybrid Network(有線乙太網/無線客戶端混合應用)。本文件主要關注的是“Wi
Dr.Elephant啟動過程問題彙總
在首次啟動Dr.Elephant時,因為配置不當或者環境因素可能會導致啟動失敗。當啟動失敗後,我們可以從Dr.Elephant的日誌檔案(預設的啟動日誌是dr.log)中檢視啟動過程日誌,找到Error和Exception,定位問題所在。 下面,是我總結的自己以及大家在啟動
Dr.Elephant 部署啟動詳細流程
------------------ 最近嘗試在測試環境安裝部署了Dr.Elephant,花了不少時間,碰到一些問題。藉助於官方文件和LinedIn akshayrai大神的幫助,最終成功啟動Dr.Elephant。鑑於國內還沒有類似的文章詳細介紹Dr.Elephant的
dr.elephant 環境搭建及使用詳解
Dr.elephant是一款對Hadoop和Spark任務進行效能監控和調優的工具,它由LinkedIn的團隊於2016年開源,開源之前已經在公司執行使用2年。目前使用Dr.elephant的公司國內的有Didi,國外的有airbnb、inmobi、hulu、FourSqua
【Dr.Elephant原始碼分析系列文章-1】
Dr.Elephant是LinkedIn於2016年4月開源的一個Hadoop平臺效能調優工具。我們可以從這個連結獲取原始碼:https://github.com/linkedin/dr-elepha
Dr.Elephant簡介
Dr.Elephant被定位成一個對Hadoop和Spark任務進行效能監控和調優的工具,它能夠自動收集Hadoop平臺所有的度量標準,並對收集的資料進行分析,並將分析結果以一種簡單且易於理解的形式展示出來。Dr.Elephant的設計目的是通過它對任務的分析結果指導Ha
ProtoBuf開發者指南
目錄 1 概覽 1.1 什麼是protocol buffer 1.2 他們如何工作 1.3 為什麼不用XML? 1.4 聽起來像是為我的解決方案,如何開始? 1.5 一點歷史 2 語言指導 2.1 定義一個訊息型別 2.2 值型別 2.3 可選欄位與預設值 2.4