Flume 1.7 源码分析(一)源码编译

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lnho2015/article/details/57416739

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源码工程导入

其中比较重要的就是上图圈起来的模块了,其中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文件。

扫描二维码关注公众号,回复: 3468299 查看本文章

2.2.3 简单测试

在TestMemoryChannel类右键选择Run ‘TestMemoryChannel’运行JUnit单元测试。检查是否有报错。

猜你喜欢

转载自blog.csdn.net/Lnho2015/article/details/57416739
今日推荐