dr.elephant 环境搭建及使用详解

时间:2022-05-13 18:37:12

Dr.elephant是一款对Hadoop和Spark任务进行性能监控和调优的工具,它由LinkedIn的团队于2016年开源,开源之前已经在公司运行使用2年。

目前使用Dr.elephant的公司国内的有Didi,国外的有airbnb、inmobi、hulu、FourSquare和PayPal等等。
项目地址:https://github.com/linkedin/dr-elephant

笔者所在公司每天有上万作业提交yarn执行,如果能提高作业性能,这对提升集群资源利用率,减少硬件投入成本有很大意义。

本文主要介绍:

  1. dr.elephant 环境搭建及问题处理
  2. dr.elephant功能介绍
  3. 简要介绍dr.elephant架构

1、环境搭建及问题处理

整体环境:dr.elephant 2.0.6, hadoop 2.6.0, spark 2.0.1

1)从github上下载Dr. Elephant源码
git clone https://github.com/linkedin/dr-elephant.git
本地安装play框架,在环境变量PATH添加play命令路径。play对Java版本要求,版本必须是Java 8以上。(本人下的是play-2.2.6)

2)play framework的环境变量配置

 export JAVA_HOME=/usr/jdk64/jdk1.8.0_60/
export PLAY_HOME=/opt/play-2.2.6
PATH=\$PATH:\$PLAY_HOME:\$JAVA_HOME/bin

# 能运行play命令即为配置成功
修改源码中编译时用到的配置文件,app-conf/compile.conf,将hadoop_version和spark_version修改成对应的版本。(会下载对于应版本依赖)。

注意: dr.elephant的当前版本默认仅支持spark 1.X,不支持spark 2.X。笔者对dr.elephant 源码修改支持了spark 2.0.1,如用spark 2.0.1版本,可参考笔者github来兼容spark 2.0.1

3)运行源码中编译命令./compile.sh [./app-conf/compile.conf],请将中括号中路径修改为相应文件的路径。编译过程会下载很多需要用到的jar包和文件,请耐心等待。我前两次编译都因为部分文件下载失败而导致编译失败。如果有问题,继续尝试编译,已经下载过的文件会自动跳过,就不用再次下载了。

4)编译完成后,会有SUCCESS的提示。这时可以看到在源码文件夹中,多了一个目录dist,进入这个目录可以看到,里面有一个zip包dr-elephant.zip,解压缩这个zip包,生成dr-elephant的代码,可用于部署使用。

5) 配置文件
1、配置app-conf/elephant.conf

port=9000
db_url=10.87.201.125
db_name=drelephant
db_user=hadoop
db_password="hadoop"

2、配置app-conf/Fetcher.xml

<fetcher>
<applicationtype>spark</applicationtype>
<classname>com.linkedin.drelephant.spark.fetchers.FSFetcher</classname>
<params>
<event_log_size_limit_in_mb>150</event_log_size_limit_in_mb>
<event_log_location_uri>webhdfs://hadoop001.com:50070/spark2_logs</event_log_location_uri>
<use_rest_for_eventlogs>true</use_rest_for_eventlogs>
<should_process_logs_locally>true</should_process_logs_locally>
</params>
</fetcher>

3、配置bin/start.sh (参考)

export HADOOP_HOME=/opt/hadoop-online
export HADOOP_CONF_DIR=/opt/hadoop-online/etc/hadoop
export ELEPHANT_CONF_DIR=/home/hadoop/xu.wenchun/dr-elephant-2.0.6/app-conf
export JAVA_HOME=/opt/jdk1.7.0_71
export SPARK_HOME=/home/hadoop/xu.wenchun/spark-2.0.1-bin-2.6.0
export SPARK_CONF_DIR=/home/hadoop/xu.wenchun/spark-2.0.1-bin-2.6.0/conf/
export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$JAVA_HOME/bin:$PATH

编译过程问题整理:

1) origin location must be absolute
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整个目录,重编译即可。

2)编译过程发现编译test模块失败
报错主要是test模块的代码编译出现error。

处理方法:以笔者的情况为例,修改兼容spark 2.0.1,但是没修改test模块相关代码,所以编译的时候去掉test来跳过test编译,在compile.sh脚本中修改"play_command \$OPTS clean test compile dist""play_command \$OPTS clean compile dist" 即可。

3)如果安装npm失败,可以自行安装下载再编译

使用中的问题

1)系统没读取到配置信息导致报错

Could not invoke class com.linkedin.drelephant.mapreduce.fetchers.MapReduceFetcherHadoop2

出错原因是系统没拿到yarn配置信息,这个时候需要把hadoop目录下的yarn-site.xml, mapred-site.xml, hdfs-site.xml文件复制到app-conf目录下即可。

2、功能使用

dr.elephant 能从yarn读取hive、MR、spark作业日志信息,通过对执行过程中资源使用,执行时间,数据倾斜等方面评估作业执行效率。

dr.elephant 环境搭建及使用详解

下图是search模块,可以通过App ID搜索执行完的作业的日志信息,分析作业各个阶段效率情况。

dr.elephant 环境搭建及使用详解

对于发现的性能问题,该工具提供解决思路,如下图。

dr.elephant 环境搭建及使用详解

对于oozie的workflow,如下图可能拿到按日期的作业执行情况。

dr.elephant 环境搭建及使用详解

以上就是功能的简要介绍。

3、dr.elephant 架构简述

dr.elephant主要分为两部分:数据采集,数据展示。

  • 数据采集:JobGenerator周期性(每分钟)的从yarn RM拿到作业执行信息,然后根据作业类型,给相应类型的Fetcher读取日志数据并解析,把解析结果存mysql。

  • 数据展示:前端从mysql拿数据进行展示。

dr.elephant 环境搭建及使用详解

最后,在LinkedIn,所有作业必须通过Dr.elephant检验性能全部通过才可以上调度运行,我们可以参考该工具来提升公司作业性能水平。

(完)

如果有什么问题欢迎留言讨论,如果喜欢本文可以点赞支持笔者。

参考:

官方部署文档

Hadoop和Spark性能监控工具Dr. Elephant的编译、部署及使用