Dr.Elephant是LinkedIn于2016年4月开源的一个Hadoop平台性能调优工具。我们可以从这个链接获取源码:https://github.com/linkedin/dr-elephant。
Dr.Elephant的问世将改变Hadoop/Spark用户的开发习惯,同时也将大大减少Hadoop平台开发者和管理者的负担。可以预见到,在未来较短的一段时间内,Dr.Elephant将会存在于几乎每个大规模的Hadoop平台上。LinkedIn内部已经全面推广并使用Dr.Elephant作为Hadoop/Saprk程序的监控调优工具。在LinkedIn内部,凡是需要上到Production环境运行的Hadoop/Saprk程序,都需要先在测试环境中运行测试,只有当Dr.Elephant对这个程序“亮绿灯”时,才能提交到线上Production环境运行。如果Dr.Elephant对程序有一些调优建议,开发人员需要解决掉这些问题,继续提交到测试环境中,直到Dr.Elephant对这个程序“亮绿灯”为止。
Dr.Elephant的程序是基于Play框架开发的,使用的开发语言是Java+Scala。如果想对Dr.Elephant源码进行学习,建议你先对Play框架有一个基础的了解,这样会对Dr.Elephant的代码组织结构有一个更清晰的认识。下面这个链接是Play框架的官方文档:https://www.playframework.com/documentation。
Dr.Elephant的源码结构如下:
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
下面会详细介绍项目中每个文件夹的内容:
app
app文件夹包含了项目的核心源码。这部分的代码包含了:MVC的实现(UI部分的页面和Controller的实现、Model的定义、View页面的实现),Hadoop/Spark任务收集、分析后台任务的实现。该目录中子目录清晰,顾名思义。其中,Hadoop部分的实现使用的是Java语言,Spark部分的实现使用的是Scala语言。(关于语言选择上,个人认为,Spark和Scala是绝配,使用Scala在处理Spark产生的历史事件日志会更方便)
app-conf
这个文件夹包含了Dr.Elephant用到的一些应用内部的配置。
elephant.conf文件包含了UI的端口设置、DB连接设置、秘钥文件以及JVM参数的设置。
在FetcherConf.xml文件中,可以配置获取Hadoop和Spark任务的类,通过这个配置,可以对不同的任务类型指定不同的类去处理。
HeuristicConf.xml文件定义了每个类型的任务中每个启发式算法的类名称以及显示名称。
JobTypeConf.xml文件定义每种任务的名称、类型和相关配置。
conf
这个文件夹包含了Play框架中对Dr.Elephant的一些配置。
evolutions文件定义了MySQL数据库、表的结构,MySQL会在Dr.Elephant启动时自动创建完成。
application.conf文件定义了Play框架的入口类、秘钥、数据库驱动以及日志级别相关的配置。
images
包含了在Wiki文档中用到的图片。
public
assets文件夹包含了用到的一些类库文件。
css文件夹包含了用到的css文件。
images文件夹包含了用到的一些图片。
js文件夹中是java script文件。
scripts
start.sh文件是Dr.Elephant的启动脚本。
stop.sh文件是Dr.Elephant的停止脚本。
test
test文件夹包含unit test文件。
compile.sh
项目编译脚本。
在该系列文章中,我们会详细分析每一部分的代码。