Dr-elephant安装说明文档
1. 前言
“大象医生”是LinkedIn推出的一款Hadoop和Spark性能调节工具,它能够自动收集Hadoop平台所有的度量标准,并对收集的数据进行分析,并将分析结果以一种简单且易于理解的形式展示出来。这款工具将更好的帮助用户理解、分析并提高他们的工作效率。其中主要核心的东西是它定义了一系列的启发式算法(Heuristics),这些算法提供了对Hadoop/Spark任务进行性能分析的功能,这些启发式算法都是基于一定的Hadoop/Spark任务调优规则而设计的,而且这些启发式算法被设计成插件式的、可配置的。用户可以自定义这个规则或者配置新的参数来适应自己公司的开发环境。
2. 安装步骤
Linkedln为了让更多的用户使用这款产品时能更贴切的适用于自己公司的开发环境,他们只提供源码,用户必须自己根据Hadoop版本跟Spark版本编译源码生成安装包。
2.1 下载源码,准备编译环境
$> git clone https://github.com/linkedin/dr-elephant.git
$> cd dr-elephant*
因为这款产品是用play框架搭建的,使用了scala跟java语言,所以需要准备play的环境。下载地址: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
#添加环境变量
$> 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版本改为跟生产一致
hadoop_version=2.6.0
spark_version=1.6.0
$> ./compile.sh(开始编译)
2.3 编译完成会在dist目录下面生成安装包。将安装包copy到要部署的服务器上。(最好选择跟jobhistoty一台的服务器,免得后面出现拒绝连接的错误。)
$> cd dist
$> scp dr-elephant-2.0.6.zip [email protected]:/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(配置数据库信息,这里要求只能是mysql的,且版本必须在5.5以上,建议安装mariadb 10.0,相关文档https://www.jianshu.com/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的环境
$> 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 启动服务,查看日志
$> bin/start.sh
#这里值得注意的是程序启动后会产生3个日志文件,一个dr.log(程序启动过程中的日志),一个logs/application.log(程序启动过程中的结果),最后一个最重要的是程序启动后的各种运行日志,这个日志的路径比较奇怪,在跟dr-elephant-2.0.6同级的目录下会产生一个logs/elephant/dr_elephant.log(日志会每天生成一个),这里面的内容才是验证程序具体的问题的地方。
2.6 登录页面,查看任务状态
http://172.28.3.151:8083/(这里我修改了web的端口,配置在app-conf/elephant.conf中)
主页显示的是今天最紧集群跑的任务。
search页面可以查看历史任务的执行情况。
具体的使用方法单独出一个使用文档,下面说一下安装过程中的坑。
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环境(https://www.jianshu.com/p/bef810c33721),另外安装完之后,可能出现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!
解决方式:出现这个错误就是dr-elephant在建索引时,索引长度太大造成的。按照2.4步骤配置就不会出现这类问题。
4.2 Tez模块报错
[图片上传中...(tez1.png-5e31d9-1535539755179-0)]
这个是因为最新版的dr-elephant引入了tez计算模型,到那时我们生产测试集群都没有使用,导致连接拒绝。
解决方式:修改 app-conf/FetcherConf.xml文件,注释掉tez fetcher相关的配置
4.3 能获取mapreduce任务并分析,但是spark任务fetch不了。原因是dr-elephant采用的是分析spark history中任务日志的压缩格式,而spark history 默认是不对日志进行压缩的,所以需要修改。
解决方式:修改spark history配置文件,让它支持压缩。在CM界面,spark-->配置-->Gateway-->高级-->spark-conf/spark-defaults.conf 在这个代码框中加入:spark.eventLog.compress=true。然后重启spark相关组件,让设置生效。