1. 程式人生 > >如何在eclipse中開發flume

如何在eclipse中開發flume

原始碼下載
http://www.neoye.com/3446.html apache-flume-1.5.2-src.tar.gz
2
解壓至C盤根目錄
建議放到C盤根目錄中,測試時我是放到這裡,其它目錄不保證可以順利通過,可參考測試。
3
執行mvn
進入c:\apache-flume-1.5.2目錄,執行mvn install -DskipTests -Dtar注意:網上有其它參考材料說要先將註釋掉hbase和hadoop-test相關的依賴,我沒這樣做,沒問題。
可能根據環境不同有差異。不過大家遇到與hbase和hadoop-test相關的錯誤可以進行參考更正。
4
部分程式碼參考
<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>
5
典型問題1處理[重點]
1、error reading error in opening zip file
[ERROR] error: error reading
/org/elasticsearch/elasticsearch/0.90.1/elasticsearch-0.90.1.jar;
error in opening zip file
[ERROR] -> [Help 1]
出現這個錯誤可能是已經下載的這個jar存在問題。到本地庫中找到對應的jar所在位置,然後將其刪除,重新執行mvn命令可解決。以上這個錯誤不一定是elasticsearch的jar找不到,其他jar也可能出現這個問題。
6
典型問題2處理[重點]
flume-ng-morphline-solr-sink出現問題,對應的kite-morphline沒有找到依賴。要使用這個flume-ng-morphline-solr-sink做些文章的,所以這裡出問題必須解決。
[ERROR] Failed to execute goal on project flume-ng-morphline-solr-sink: Could no
t resolve dependencies for project org.apache.flume.flume-ng-sinks:flume-ng-morp
hline-solr-sink:jar:1.5.2: Failed to 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 artifact descriptor for org.kitesdk:kite-morphlines-all:pom:
0.12.0: Could not transfer artifact org.kitesdk:kite-morphlines-all:pom:0.12.0 f
rom/to cdh.repo (
https://repository.cloudera.com/artifactory/cloudera-repos
): Co
nnection to https://repository.cloudera.com refused: Connection timed out: conne
ct -> [Help 1]
提示的錯誤是連線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中。
<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>
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下來再上傳到私服解決。最後提示”Build Success”編譯成功了,見下圖。

7
編譯成eclipse工程
mvn eclipse:eclipse至此,使用eclipse匯入工程即可進行開發了。
我這裡還遇到了兩個flume-dataset-sink的
單體測試
中有一個方法編譯不過去的問題。因為我沒用到這個sink所以也沒去解決。另一個問題是可能在install時可能會遇到Missing artifact jdk.tools:jdk.tools:jar:1.6的問題。
解決辦法:在flume-ng-morphline-solr-sink的pom.xml檔案中新增一個依賴。
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
至於jdk的版本和系統路徑根據實際的開發環境的環境變數而定,其他都沒問題。