目前最新的Flume-NG版本是1.5.2,下面介绍一下编译本源码的一些经验。主要是一些问题是如何解决的。
环境说明:
操作系统:Windows7
Maven版本:3.0.4
Eclipse版本:4.3(Kepler)
一、源码下载:http://www.apache.org/dyn/closer.cgi/flume/1.5.2/apache-flume-1.5.2-src.tar.gz
二、解压至C盘根目录
三、进入c:\apache-flume-1.5.2目录,运行mvninstall -DskipTests -Dtar
网上有说要先将注释掉hbase和hadoop-test相关的依赖,我没这样做。没问题。
可能根据环境不同少有差异。不过大家遇到与hbase和hadoop-test相关的错误可以进行更正。
把那部分代码粘上来大家参考
<pre lang="html"line="1" escaped="true">
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>${hbase.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-test</artifactId>
<version>${hadoop.version}</version>
</dependency>
</pre>
运行该命令会从中央库上down写jar包,时间比较漫长。根据网络情况而定。期间可能会遇到以下几个问题:
1、error reading errorin opening zip file
<pre lang="html"line="1" escaped="true">
[ERROR] error: error reading
/org/elasticsearch/elasticsearch/0.90.1/elasticsearch-0.90.1.jar;
error in opening zip file
[ERROR] -> [Help 1]
</pre>
出现这个错误可能是已经下载的这个jar存在问题。到本地仓库中找到对应的jar所在位置,然后将其删除,
重新运行mvn命令可解决。
以上这个错误不一定是elasticsearch的jar找不到,其他jar也可能出现这个问题。
2、因为就是要使用这个flume-ng-morphline-solr-sink做些文章的,所以这里出问题一定是不能容忍的。必须解决,着实也困扰了一阵子。
<pre lang="html" line="1"escaped="true">
[ERROR] Failed to execute goal onproject flume-ng-morphline-solr-sink: Could no
t resolve dependencies forproject org.apache.flume.flume-ng-sinks:flume-ng-morp
hline-solr-sink:jar:1.5.2: Failedto collect dependencies for [org.apache.flume:
flume-ng-core:jar:1.5.2(compile), org.slf4j:slf4j-api:jar:1.6.1 (compile), org.
kitesdk:kite-morphlines-all:pom:0.12.0(compile?), org.slf4j:jcl-over-slf4j:jar:
1.6.1 (provided),org.apache.solr:solr-test-framework:jar:4.3.0 (test), org.kite
sdk:kite-morphlines-solr-core:jar:tests:0.12.0(test), junit:junit:jar:4.10 (tes
t)]: Failed to read artifactdescriptor for org.kitesdk:kite-morphlines-all:pom:
0.12.0: Could not transferartifact org.kitesdk:kite-morphlines-all:pom:0.12.0 f
rom/to cdh.repo(https://repository.cloudera.com/artifactory/cloudera-repos): Co
nnection tohttps://repository.cloudera.com refused: Connection timed out: conne
ct -> [Help 1]
</pre>
flume-ng-morphline-solr-sink出现问题,对应的kite-morphline没有找到依赖。这个问题困扰了我很久,提示的错误是连接cloudera的中央库超时了,看似是网络问题。
其实解决了网络问题还有另外一个重大问题就是版本对应不上。查看了一下flume-ng-morphline-solr-sink的pom.xml文件,对应查找的kite.version是0.12.0版本。但其实
cloudera的中央库上也没有这个版本了。所以解决办法是:
A、将kite.version的版本改成0.15.0.修改进入源码根目录找到pom.xml文件,找到<kite.version>0.15.0</kite.version>将0.12.0修改成0.15.0
B、找到<dependenciesManagement>标签,将下面代码插入到dependency中。
<pre lang="html" line="1"escaped="true">
<dependency>
<groupId>org.kitesdk</groupId>
<artifactId>kite-morphlines-all</artifactId>
<version>${kite.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
</exclusion>
</exclusions>
<type>pom</type>
<optional>true</optional>
</dependency>
</pre>
C、进入C:\apache-flume-1.5.2-src\flume-ng-sinks\flume-ng-morphline-solr-sink目录,打开pom.xml文件,将所有${kite.version}替换成0.15.0。上一步的目的是如果子
工程引用了org.kitesdk的话,则不使用这个版本。可以自定义其引用的版本。
我在实际应用中就遇到了这两个主要的问题。当然其中还有一些主要是repository连接不上的问题(公司比较烂,网络有限制)。想各种办法从网上先down下来再上传到私服解决。
最后提示下图界面,说明编译成功了。
四、然后把源码编译成eclipse工程。mvneclipse:eclipse
至此,使用eclipse导入工程即可进行开发了。
我这里还遇到了两个flume-dataset-sink的单体测试中有一个方法编译不过去的问题。因为我没用到这个sink所以也没去解决。
另一个问题是可能在install时可能会遇到
Missing artifact jdk.tools:jdk.tools:jar:1.6的问题。
解决办法:在flume-ng-morphline-solr-sink的pom.xml文件中添加一个依赖
<pre lang="html" line="1"escaped="true">
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
</pre>
至于jdk的版本和系统路径根据实际的开发环境的环境变量而定。
其他都没问题。