Flume 1.7 源码分析(一)源码编译
Flume 1.7 源码分析(二)整体架构
Flume 1.7 源码分析(三)程序入口
1 说明
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,目前已经是Apache的一个子项目。Flume是一个专用工具被设计为旨在往HDFS、HBase发送数据。它对HDFS有特殊的优化,并且集成了Hadoop的安全特性。本文将详细分析Flume核心模块的源码实现。
2 下载、编译
2.1 源码检出
Flume源码的git地址是:https://git-wip-us.apache.org/repos/asf/flume.git。本文采用的分支是flume-1.7。
2.2 源码编译
Flume采用Maven进行构建。本文采用IDEA作为编译、调试工具。
2.2.1 Maven依赖下载
配置阿里云的Maven服务器,速度较快,并可完成绝大多数包的下载。
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
使用阿里云Maven服务器,仍然有一些包无法解决,例如FlumeAuth模块的hadoop-minikdc和SolrSink的kite-morphlines-all等。由于这部分缺失的包,基本都是属于flume的插件模块之中,可直接关闭这些插件模块,不会影响主程序的执行和源码阅读。同时,还可移除其他的你不需要使用的source和sink和channel插件模块,可加快编译速度。
导入好的项目如下图所示:
其中比较重要的就是上图圈起来的模块了,其中flume-ng-core存放了最核心部分的代码,包含基础的Source、Channel、Sink等;flume-ng-node则是存放了程序启动的代码(入口函数)。
其他可能会用到的模块就是flume-ng-sources、flume-ng-channels、flume-ng-sinks,这3个模块存放了非必须的flume组件(flume-ng-core中未包含的),里面有些组件也是很常用的。
2.2.2 编译打包
使用mvn clean install -Dmaven.test.skip=true进行打包,看到BUILD SUCCESS则代表编译成功,可进行下一步。
本步骤一定要有,不然debug的时候会报某些类找不到,这些类大多数是由avro定义的文件编译后才会生成的class文件。
2.2.3 简单测试
在TestMemoryChannel类右键选择Run ‘TestMemoryChannel’运行JUnit单元测试。检查是否有报错。