Flume源码分析—利用Eclipse对Flume源码进行远程调试分析环境搭建(一)

来源:互联网 发布:papi酱靠什么挣钱知乎 编辑:程序博客网 时间:2024/06/06 01:56

一、引言
最近在学习了解大数据分析相关的工作,对于其中用到的收集部分用到了flume,特意花了点时间了解了一下flume的工作原理及工作机制。个人了解一个新的系统首先从概略上了解一下其基本原理后,接着从源代码入手了解其部分关键实现部分,最后会尝试去修改部分内容,从而加深对其的理解。有关flume原理部分相关资料网上很多,这里介绍一下我的源码分析环境的搭建过程。
二、环境介绍
1、apache-flume-1.6.0-src
2、CentOS 7.0
3、Eclipse Java EE Kepler
4、jdk-6u45-linux-x64.rpm
5、Source Insight
6、Oracle virtual Box
三、分析方法
在CentOS中安装JDK,开启Eclipse的远程调试功能,进行跟踪调度分析。相比与直接用Source Insight直接阅读源码效率更高点,但在分析过程中可以使用Source Insight辅助分析类之间的引用关系。
四、分析步骤
1、在CentOS中安装JDK及Flume,安装过程不再多述。该过程中CentOS及Flume均安装在virtual Box中,IP地址为192.168.1.11。
2、设置Flume启动参数,利用记事本打开apache-flume-1.6.0-src\bin\flume-ng并进行编辑,主要将以下项

JAVA_OPTS="-Xmx20m"

修改为

JAVA_OPTS="-Xmx20m -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=y"

这里设置了远程调试的端口为8888.远程调试相关参数设置见这里
3、设置Eclipse的远程调试功能,如下图所示:
这里写图片描述
4、利用Eclipse Java EE Kepler导入已有Maven工程,即flume源码,如下图所示:
这里写图片描述

5、在Eclipse中JAVA文件……\apache-flume-1.6.0-src\flume-ng-node\src\main\java\org\apache\flume\node\Application.java中设置断点,在CentOS中启动Flume即可对flume的启动过程进行远程调试。由此作为入口点对整个flume源码进行跟踪分析
注意:要先启动flume,再利用eclipse进行调试,不然会报无法连接。
五、常见问题
由eclipse引入maven工程,会出现很多的错误,常见的一些解决办法如下:
1、最常见的是由于被墙的厉害,maven.twttr.com以及google中的部分库不能下载,试了几种,最好的解决办法参见这里,即在pom文件中添加如下内容

<repository> <id>maven.tempo-db.com</id> <url>http://maven.oschina.net/service/local/repositories/sonatype-public-grid/content/</url></repository>

2、有关版本问题参见这里.
3、tools.jar问题参见这里.
4、Plugin execution not covered by lifecycle configuration问题参见这里。
5、出现AvroFlumeOGEvent cannot be resolved类似的错误,如下图所示,找不到相应的类的情况,

这是因为使用了avro,需要对pom文件进行generate-source操作,利用avro-maven-plugin插件的生成相应的JAVA文件,然后添加相应的库地址即可解决上述问题。


六、注意事项
1、由于JDK各个版本之间兼容性做的并不好,为了更好的阅读源码一定要了解各个软件所使用的JDK版本,如Eclipse所需要的JDK、Flume所需要的JDK等等,否则会出现一些奇怪的问题,难以解决。
2、Flume在构建过程中使用到了很多开源的成熟的系统,如avro、netty、maven等等,与kafka等也存在交集,因此在分析过程中需要相应了解相关的开源系统内容。

0 0