核心流程 - 【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