收录自:http://blog.csdn.net/qsc0624/article/details/51274145

------------------------

创建Dr.Elephant项目

获取源代码

从Github仓库中获取代码,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中。

在本地安装启动MySQL。可以在这个链接下载到最新版本的MySQL:https://www.mysql.com/downloads/ 。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中。

  1. 创建新的启发式算法,并完成测试。
  2. 为该启发式算法创建一个新的view页,例如helpMapperSpill.scala.html。
  3. 在HeuristicConf.xml文件中添加该启发式算法的详情。
  4. 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开发者指南相关推荐

  1. Dr. Elephant大象医生安装文档

         Dr.Elephant被定位成一个对Hadoop和Spark任务进行性能监控和调优的工具,它能够自动收集Hadoop平台所有的度量标准,并对收集的数据进行分析,并将分析结果以一种简单且易于理 ...

  2. Dr.Elephant简介

    收录自http://blog.csdn.net/qsc0624/article/details/51249020 --------- Dr.Elephant被定位成一个对Hadoop和Spark任务进 ...

  3. google ProtoBuf开发者指南

    目录 1   概览 1.1   什么是protocol buffer 1.2   他们如何工作 1.3   为什么不用XML? 1.4   听起来像是为我的解决方案,如何开始? 1.5   一点历史 ...

  4. Android开发者指南(22) —— Accessing Resources

    前言 本章内容为Android开发者指南的Framework Topics/Application Resources/Accessing Resources章节,译为"资源调用" ...

  5. Android开发者指南(18) —— Web Apps Overview

    前言 本章内容为开发者指南(Dev Guide)/Web Applications/Web Apps Overview,版本为Android 3.2 r1,翻译来自:"happyjiahan ...

  6. Android开发者指南(4) —— Application Fundamentals

    前言 本章内容为开发者指南(Dev Guide)/Framework Topics/Application Fundamentals,版本为Android2.3 r1,翻译转载并整理自译言:" ...

  7. Spring Security OAuth 2开发者指南译

    Spring Security OAuth 2开发者指南译 介绍 这是用户指南的支持OAuth 2.0.对于OAuth 1.0,一切都是不同的,所以看到它的用户指南. 本用户指南分为两部分,第一部分为 ...

  8. 【译】①JWS之Java[tm] Web Start开发者指南目录

    为什么80%的码农都做不了架构师?>>>    Java[tm] Web Start开发者指南1.2版本. 这个开发者指南提供了怎么使用Java[tm] web start和jnlp ...

  9. Android开发者指南(5) —— monkeyrunner

    前言 本章内容为开发者指南(Dev Guide)/Developing/Tools/monkeyrunner,版本为Android2.3 r1,翻译转载并整理自译言:"biAji" ...

最新文章

  1. Waymo无人卡车高调重返凤凰城,但货运先机已失
  2. 从零开始学习 ASP.NET MVC 1.0 (三) Controller/Action 深入解析与应用实例 【转】
  3. 理解Kubernetes(2): 应用的各种访问方式
  4. java logic_Java Logic总结2
  5. single-number-ii
  6. 新加坡科技设计大学(SUTD)招收计算机视觉方向全奖PhD学生
  7. linux 两个序列比对,如何用COBALT构建本地的多序列比对(Linux系统)
  8. Jmeter-3.0的源码导入eclipse并执行
  9. P3172-[CQOI2015]选数【dp,容斥】
  10. extjs弹出窗口查看文本内容-new Ext.Window
  11. leetcode 778. 水位上升的泳池中游泳(并查集)
  12. VB100十月测试:360可牛凯歌高奏 金山失利瑞星缺席
  13. Lnmp上安装Yaf学习(一)
  14. 『TensorFlow』批处理类
  15. csdn博客登录不上-why?
  16. BoundsChecker使用
  17. Gitblit安装遇到的一些问题
  18. linux返回上一步命令
  19. svn 服务器ip地址变更
  20. c语言OBD编程,汽车OBD2诊断程序开发

热门文章

  1. 乐华阅卷系统打不开服务器,乐华网上阅卷系统1.0操作手册.docx
  2. AI会抢走我们的饭碗?现在报告破解谜失
  3. (十)基于Linux算时差——超声波测距原理及代码实现
  4. 阿里云StreamCompute流计算架构
  5. 跨域:postMessage
  6. org.apache.jasper.JasperException: /WEB-INF/menu-page.jsp (line: 108, column: 1) File [modal-menu-a
  7. 数据库管理工具DBeaver的下载以及安装
  8. 51单片机简易交通灯控制
  9. 2015考研数学复习全书【数一】
  10. 【调剂】东北石油大学地球科学学院地震资料处理团队接受调剂研究生