核心流程 - 【Dr.Elephant源码分析系列文章-2】
来源:互联网 发布:手机验钱软件 编辑:程序博客网 时间:2024/04/29 04:11
关于如何开始代码部分的分析,我思考了许久。原因如下:Dr.Elephant的核心代码不多,截止到我读代码时,一共1万行左右。核心代码部分比较集中,可以通过一篇文章来分析完。Dr.Elephant的扩展性非常好,在介绍源码时,扩展性也是非常值得介绍的。
Dr.Elephant启动入口
app/Global.java类继承了play框架的 GlobalSettings 类,并覆盖了其中的onStart和onStop方法。使用play框架启动Dr.Elephant时,会首先调用Global类中的onStart方法。
public void onStart(Application app) {
Logger.info("Starting Application...");
fixJavaKerberos();
try {
_drElephant = new DrElephant();
_drElephant.start();
} catch (IOException e) {
Logger.error("Application start failed...", e);
}
}
在该方法中,fixJavaKerberos()方法修复Java 1.6在使用Kerberos时的一个bug。接下来会实例化一个DrElephant对象,该对象继承了多线程的Tread类,并触发这个线程开始执行。当play框架停止Dr.Elephant应用时,会调用Global的onStop方法,如下:
public void onStop(Application app) {
Logger.info("Stopping application...");
if (_drElephant != null) {
_drElephant.kill();
}
}
DrElephant和DrElephantRunner
DrElephant类完成对DrElephantRunner的一个封装,DrElephant构造方法中实例化一个DrElephantRunner对象。DrElephant的run方法会调用该DrElephantRunner对象的run方法。
DrElephantRunner.run()
DrElephantRunner.run()会申请一个线程池和任务队列来完成Hadoop/Spark任务的收集、分析过程。
用一个流程图概括如下:
作者简介:屈世超,对高并发系统设计开发感兴趣,现专注于大数据开发工作。曾任职小米科技公司服务端后台开发工程师,现担任EverString数据平台组高级开发工程师。
1 0
- 核心流程 - 【Dr.Elephant源码分析系列文章-2】
- 核心流程 - 【Dr.Elephant源码分析系列文章-2】
- 核心流程 - 【Dr.Elephant源码分析系列文章-2】
- 综述 - 【Dr.Elephant源码分析系列文章-1】
- [EverString收录]综述 - 【Dr.Elephant源码分析系列文章-1】
- 综述 - 【Dr.Elephant源码分析系列文章-1】
- Dr.Elephant用户指南 - 【Dr.Elephant系列文章-2】
- Dr.Elephant简介 - 【Dr.Elephant系列文章-1】
- Dr.Elephant开发者指南 - 【Dr.Elephant系列文章-3】
- Dr.Elephant部署指南 - 【Dr.Elephant系列文章-4】
- Dr.Elephant启发式算法指南 - 【Dr.Elephant系列文章-5】
- Dr.Elephant Rest API -【Dr.Elephant系列文章-7】
- FAQ 常见问题 -【Dr.Elephant系列文章-8】
- Hadoop任务优化建议 - 【Dr.Elephant系列文章-6】
- Dr.Elephant 部署启动详细流程
- Dr.Elephant 部署启动详细流程
- android 核心分析系列文章
- struts2核心流程源码分析
- 教你禁用右键,也教你如何破解
- Android反编译分析工具
- 构建自己的 Git 服务器
- Spring学习总结(13)——Spring+Log4j+ActiveMQ实现远程记录日志
- 结构体指针错误分析
- 核心流程 - 【Dr.Elephant源码分析系列文章-2】
- Android Activity生命周期(一)
- 一点一点学C#1
- 淘宝tsar 安装使用教程 nginx配置
- Web 服务器压力测试实例详解
- easyui 学习(2) --tree
- 最小生成树 hdoj1233 nyoj38
- 锁定Activity方向
- Android Http链接和Socket链接区别