Dr-elephant安裝說明文檔
1. 前言
“大象醫(yī)生”是LinkedIn推出的一款Hadoop和Spark性能調(diào)節(jié)工具,它能夠自動收集Hadoop平臺所有的度量標(biāo)準(zhǔn),并對收集的數(shù)據(jù)進(jìn)行分析,并將分析結(jié)果以一種簡單且易于理解的形式展示出來。這款工具將更好的幫助用戶理解、分析并提高他們的工作效率。其中主要核心的東西是它定義了一系列的啟發(fā)式算法(Heuristics),這些算法提供了對Hadoop/Spark任務(wù)進(jìn)行性能分析的功能,這些啟發(fā)式算法都是基于一定的Hadoop/Spark任務(wù)調(diào)優(yōu)規(guī)則而設(shè)計的,而且這些啟發(fā)式算法被設(shè)計成插件式的、可配置的。用戶可以自定義這個規(guī)則或者配置新的參數(shù)來適應(yīng)自己公司的開發(fā)環(huán)境。
2. 安裝步驟
Linkedln為了讓更多的用戶使用這款產(chǎn)品時能更貼切的適用于自己公司的開發(fā)環(huán)境,他們只提供源碼,用戶必須自己根據(jù)Hadoop版本跟Spark版本編譯源碼生成安裝包。
2.1 下載源碼,準(zhǔn)備編譯環(huán)境
$> git clone https://github.com/linkedin/dr-elephant.git
$> cd dr-elephant*
因為這款產(chǎn)品是用play框架搭建的,使用了scala跟java語言,所以需要準(zhǔn)備play的環(huán)境。下載地址:https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe-activator-1.3.12.zip
$> wget https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe-activator-1.3.12.zip
$> unzip typesafe-activator-1.3.12.zip
#添加環(huán)境變量
$> export PLAY_HOME=/opt/soft/activator-dist-1.3.12
$> export PATH=${JAVA_HOME}/bin:${PLAY_HOME}/bin:$PATH
2.2 修改配置文件,編譯源碼
$> cd dr-elephant
$> vim compile.conf
#將Hadoop版本跟Spark版本改為跟生產(chǎn)一致
hadoop_version=2.6.0
spark_version=1.6.0
$> ./compile.sh(開始編譯)
2.3 編譯完成會在dist目錄下面生成安裝包。將安裝包copy到要部署的服務(wù)器上。(最好選擇跟jobhistoty一臺的服務(wù)器,免得后面出現(xiàn)拒絕連接的錯誤。)
$> cd dist
$> scp dr-elephant-2.0.6.zip root@172.28.3.151:/opt/soft
$> cd /opt/soft
$> unzip dr-elephant-2.0.6.zip
$> cd dr-elephant-2.0.6
2.4 配置app-conf/elephant.conf,conf/evolutions/default/1.sql等文件
elephant.conf(配置數(shù)據(jù)庫信息,這里要求只能是mysql的,且版本必須在5.5以上,建議安裝mariadb 10.0,相關(guān)文檔http://www.itdecent.cn/p/61e9cbd1b675)
# Database configuration
db_url=master01
db_name=drelephant
db_user=root
db_password=root
1.sql(這里要修改幾個字段的索引長度。(因為暫時的mysql還不支持很長字符的索引))
create index yarn_app_result_i4 on yarn_app_result (flow_exec_id(100));
create index yarn_app_result_i5 on yarn_app_result (job_def_id(100));
create index yarn_app_result_i6 on yarn_app_result (flow_def_id(100));
#這里還需要配置一下Hadoop跟spark的環(huán)境
$> vim /etc/profile
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export HADOOP_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop
export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark
export SPARK_CONF_DIR=/opt/cloudera/parcels/CDH/lib/spark/conf
(如果在這里配置后,程序啟動報錯還是找不到配置文件,就將這幾個配置加到程序的啟動腳本bin/start.sh)。
2.5 啟動服務(wù),查看日志
$> bin/start.sh
#這里值得注意的是程序啟動后會產(chǎn)生3個日志文件,一個dr.log(程序啟動過程中的日志),一個logs/application.log(程序啟動過程中的結(jié)果),最后一個最重要的是程序啟動后的各種運(yùn)行日志,這個日志的路徑比較奇怪,在跟dr-elephant-2.0.6同級的目錄下會產(chǎn)生一個logs/elephant/dr_elephant.log(日志會每天生成一個),這里面的內(nèi)容才是驗證程序具體的問題的地方。
2.6 登錄頁面,查看任務(wù)狀態(tài)
http://172.28.3.151:8083/(這里我修改了web的端口,配置在app-conf/elephant.conf中)

主頁顯示的是今天最緊集群跑的任務(wù)。

search頁面可以查看歷史任務(wù)的執(zhí)行情況。
具體的使用方法單獨出一個使用文檔,下面說一下安裝過程中的坑。
3. 編譯過程的錯誤整理
3.1 sbt模塊報錯
sbt.ResolveException: unresolved dependency: commons-codec#commons-codec;1.8: org.apache#apache;13!apache.pom(pom.original) origin location must be absolute: file:/Users/rvesse/.m2/repository/org/apache/apache/13/apache-13.pom
處理方式: 刪除~/.ivy2整個目錄,重編譯即可。
3.2 前端框架node安裝報錯。
首先該項目需要編譯web模塊故需要安裝node環(huán)境(http://www.itdecent.cn/p/bef810c33721),另外安裝完之后,可能出現(xiàn)bower install 安裝失敗,這個可以跳過。

4. 使用過程中的問題整理
4.1 索引過長
Specified key was too long; max key length is 767 bytes [ERROR:1071, SQLSTATE:42000]”, “Database 'default' is in an inconsistent state!
解決方式:出現(xiàn)這個錯誤就是dr-elephant在建索引時,索引長度太大造成的。按照2.4步驟配置就不會出現(xiàn)這類問題。
4.2 Tez模塊報錯
[圖片上傳中...(tez1.png-5e31d9-1535539755179-0)]
這個是因為最新版的dr-elephant引入了tez計算模型,到那時我們生產(chǎn)測試集群都沒有使用,導(dǎo)致連接拒絕。
解決方式:修改 app-conf/FetcherConf.xml文件,注釋掉tez fetcher相關(guān)的配置
<!--
<fetcher>
<applicationtype>tez</applicationtype>
<classname>com.linkedin.drelephant.tez.fetchers.TezFetcher</classname>
</fetcher>
-->
4.3 能獲取mapreduce任務(wù)并分析,但是spark任務(wù)fetch不了。原因是dr-elephant采用的是分析spark history中任務(wù)日志的壓縮格式,而spark history 默認(rèn)是不對日志進(jìn)行壓縮的,所以需要修改。

解決方式:修改spark history配置文件,讓它支持壓縮。在CM界面,spark-->配置-->Gateway-->高級-->spark-conf/spark-defaults.conf 在這個代碼框中加入:spark.eventLog.compress=true。然后重啟spark相關(guān)組件,讓設(shè)置生效。