一、编写目地
最近研究Flume组件中关于复用数据,多路复用可以根据设定的信息,进一步分流。通过对flume组件的了解,除使用拦截器外,还可以对源码修改或自定义源。本次测试使用的是对源码修改。使用虚拟搭建flume + kafka环境,编写功能简单的多路复用,主要是用flume的exec收集数据源,放入到logger、hdfs、kafka队列。在这期间遇到了很多问题,也学到了一些知识,打算做个笔记吧,帮助自己也帮助别人;
二、编译环境说明
1、jdk版本:jdk1.7.0_80 注:根据pom.xml中要求flume-ng-1.6.0需要在jdk1.7中编译,使jdk1.8可能会存在问题
2、flume版本:flume-ng-1.6.0-cdh5.7.0
3、maven版本:apache-maven-3.3.9
三、Flume源码的修改
3、用maven编译flume-ng-1.6.0-cdh5.7.0源码
3.1、下载flume
cd /opt/sourcecode
wget http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0-src.tar.gz
tar -zxvf flume-ng-1.6.0-cdh5.7.0-src.tar.gz
3.2、修改源码:
cd /opt/sourcecode/flume-ng-1.6.0-cdh5.7.0/flume-ng-core/src/main/java/org/apache/flume/source
在ExecSource.java中增加如下代码:
vi ExecSource.java
// 创建map(注:在源码中336行增加)
-
Map<String,String> map=new HashMap<String,String>();
// 截取每行数据前两个字节(根据个人业务逻辑修改或使用flume中的拦截器)
// (注:在源码中339行下增加)
// 其中"state"对应于selector.header,"channelFlag"对应于mapping.XXX(如:mapping=US)
//通过这样在从源获取数据时对数据做了封装,成为event并加入header作为分流标记。
// 当event要推送入channel时,会根据header的值将其推送入相应的channel中,详细在flume配置文件
-
String channelFlag = line.substring(0,2);
-
map.put("state", channelFlag);
修改(注:源码中第340行)
-
eventList.add(EventBuilder.withBody(line.getBytes(charset)));
-
为
-
eventList.add(EventBuilder.withBody(line.getBytes(charset),map));
保存退(:wq)
四、Flume源码的编译;
4.1、源码编译
cd /opt/sourcecode/flume-ng-1.6.0-cdh5.7.0
mvn install -DskipTests
-
[INFO] ------------------------------------------------------------------------
-
[INFO] Reactor Summary:
-
[INFO]
-
[INFO] Apache Flume ....................................... SUCCESS [ 3.621 s]
-
[INFO] Flume NG SDK ....................................... SUCCESS [ 5.543 s]
-
[INFO] Flume NG Configuration ............................. SUCCESS [ 1.117 s]
-
[INFO] Flume Auth ......................................... SUCCESS [ 3.623 s]
-
[INFO] Flume NG Core ...................................... SUCCESS [ 5.092 s]
-
[INFO] Flume NG Sinks ..................................... SUCCESS [ 0.180 s]
-
[INFO] Flume NG HDFS Sink ................................. SUCCESS [ 1.932 s]
-
[INFO] Flume NG IRC Sink .................................. SUCCESS [ 0.954 s]
-
[INFO] Flume NG Channels .................................. SUCCESS [ 0.153 s]
-
[INFO] Flume NG JDBC channel .............................. SUCCESS [ 0.989 s]
-
[INFO] Flume NG file-based channel ........................ SUCCESS [ 1.078 s]
-
[INFO] Flume NG Spillable Memory channel .................. SUCCESS [ 0.960 s]
-
[INFO] Flume NG Node ...................................... SUCCESS [ 1.258 s]
-
[INFO] Flume NG Embedded Agent ............................ SUCCESS [ 1.937 s]
-
[INFO] Flume NG HBase Sink ................................ SUCCESS [ 2.021 s]
-
[INFO] Flume NG ElasticSearch Sink ........................ SUCCESS [ 1.095 s]
-
[INFO] Flume NG Morphline Solr Sink ....................... SUCCESS [ 6.976 s]
-
[INFO] Flume Kafka Sink ................................... SUCCESS [ 1.065 s]
-
[INFO] Flume NG Kite Dataset Sink ......................... SUCCESS [ 4.729 s]
-
[INFO] Flume NG Hive Sink ................................. SUCCESS [ 0.841 s]
-
[INFO] Flume Sources ...................................... SUCCESS [ 0.099 s]
-
[INFO] Flume Scribe Source ................................ SUCCESS [ 0.791 s]
-
[INFO] Flume JMS Source ................................... SUCCESS [ 0.847 s]
-
[INFO] Flume Twitter Source ............................... SUCCESS [ 0.785 s]
-
[INFO] Flume Kafka Source ................................. SUCCESS [ 0.707 s]
-
[INFO] Flume Taildir Source ............................... SUCCESS [ 0.763 s]
-
[INFO] flume-kafka-channel ................................ SUCCESS [ 0.695 s]
-
[INFO] Flume legacy Sources ............................... SUCCESS [ 0.074 s]
-
[INFO] Flume legacy Avro source ........................... SUCCESS [ 1.625 s]
-
[INFO] Flume legacy Thrift Source ......................... SUCCESS [ 0.714 s]
-
[INFO] Flume NG Clients ................................... SUCCESS [ 0.079 s]
-
[INFO] Flume NG Log4j Appender ............................ SUCCESS [ 7.450 s]
-
[INFO] Flume NG Tools ..................................... SUCCESS [ 0.843 s]
-
[INFO] Flume NG distribution .............................. SUCCESS [ 30.321 s]
-
[INFO] Flume NG Integration Tests ......................... SUCCESS [ 1.106 s]
-
[INFO] ------------------------------------------------------------------------
-
[INFO] BUILD SUCCESS
-
[INFO] ------------------------------------------------------------------------
-
[INFO] Total time: 01:36 min
-
[INFO] Finished at: 2018-04-14T21:46:36+08:00
-
[INFO] Final Memory: 106M/705M
-
[INFO] ------------------------------------------------------------------------
最后将会在flume-ng-dist/target目录下产生文件:apache-flume-1.6.0-cdh5.7.0-bin.tar.gz
4.2、编译问题:
4.2.1、ua-parser-1.3.0下载失败
[ERROR] Failed to execute goal on project flume-ng-morphline-solr-sink: Could not resolve dependencies
for project org.apache.flume.flume-ng-sinks:flume-ng-morphline-solr-sink:jar:1.6.0: Failed to collect dependencies at
org.kitesdk:kite-morphlines-all:pom:1.0.0 -> org.kitesdk:kite-morphlines-useragent:jar:1.0.0 ->
ua_parser:ua-parser:jar:1.3.0: Failed to read artifact descriptor for ua_parser:ua-parser:jar:1.3.0:
Could not transfer artifact ua_parser:ua-parser:pom:1.3.0 from/to maven-twttr (http://maven.twttr.com):
maven.twttr.com: Unknown host maven.twttr.com -> [Help 1]
解决办法:在flume源码的pom.xml下加个repository,资源地址可以自行选择
点击(此处)折叠或打开
-
<repository>
-
<id>p2.jfrog.org</id>
-
<url>http://p2.jfrog.org/libs-releases</url>
-
</repository>
4.2.2、
pentaho-aggdesigner-algorithm-5.1.5-hyde
下载失败
This problem persists with the current Hive-1.2.0 release since it depends on Calcite-1.3.0-incubating<https://github.com/apache/hive/blob/master/pom.xml#L104>
which in turn depends on artifacts like pentaho-aggdesigner-algorithm-5.1.5-hyde<https://github.com/apache/incubator-calcite/blob/branch-1.3/pom.xml#L264>
, There are also licensing issues that I am not completely sure of. For instance what is the
解决办法:在flume源码的pom.xml下加个repository,资源地址可以自行选择
点击(此处)折叠或打开
-
<repository>
-
<releases>
-
<enabled>true</enabled>
-
<updatePolicy>always</updatePolicy>
-
<checksumPolicy>warn</checksumPolicy>
-
</releases>
-
<id>conjars</id>
-
<name>Conjars</name>
-
<url>http://conjars.org/repo</url>
-
<layout>default</layout>
-
</repository>
五、测试
详见博客:http://blog.itpub.net/31511218/viewspace-2152461/
六、总结
【来自@若泽大数据】
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31511218/viewspace-2152950/
,如需转载,请注明出处,否则将追究法律责任。