征服flume之一——flume-NG的编译

[b]关于flume NG[/b]
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。

[b]flume的特点[/b]
  flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。
  flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

[b]flume的可靠性 [/b]
  当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。

[b]flume的可恢复性[/b]
  还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。

  flume的一些核心概念:
Agent 使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client 生产数据,运行在一个独立的线程。
Source 从Client收集数据,传递给Channel。
Sink 从Channel收集数据,运行在一个独立线程。
Channel 连接 sources 和 sinks ,这个有点像一个队列。
Events 可以是日志记录、 avro 对象等。


本文是征服flume系列文章的第一篇,编译flume-NG。
[b]一、下载flume-ng源码[/b]
git clone git://git.apache.org/flume.git

或者到[url=https://github.com/apache/flume]官网[/url]通过http方式下载zip包

[b]二、编译过程中可能遇到的问题[/b]
1、Missing artifact jdk.tools:jdk.tools:
flume-hdfs-sink等包中可能会报该异常,只需要在pom.xml中添加一下依赖即可



jdk.tools
jdk.tools
1.7
system
${JAVA_HOME}/lib/tools.jar


2、ua-parser-1.3.0.jar
这个jar包我尝试了几个不同的地址,均未能正常下载,遂自己下载了一份源码打了jar包
https://github.com/tobie/ua-parser/
当然,大家也可以尝试一下一下地址


maven.tempo-db.com
http://maven.tempo-db.com/artiferactory/list/twitter/


3、其他jar包
之后的编译过程中,还遇到了其他jar包无法正常加载的情况,主要有org.restlet.ext.servlet-2.1.1.jar、pentaho-aggdesigner-algorithm-5.1.3-jhyde.jar等,这些jar包都可以从一下地址找到!
http://conjars.org/repo/
http://repository.pentaho.org/artifactory/repo/
4、缺少class文件的问题
如果你使用eclipse或者其他ide打开flume项目,你会发现有几个类找不到,例如:
org.apache.flume.source.avro.AvroFlumeEvent
com.cloudera.flume.handlers.avro.FlumeOGEventAvroServer
com.cloudera.flume.handlers.avro.AvroFlumeOGEvent
等等,这些class其实是通过src路径下的avdl文件生成的。(具体生成过程我还没研究)

[b]三、执行编译命令[/b]
mvn clean install -DskipTests

由于受环境和配置参数影响,需要跳过测试,不然部分测试代码执行不成功。

[b]四、执行结果[/b]
[img]http://dl2.iteye.com/upload/attachment/0115/2375/de45b27b-43c4-31a2-bfb3-17661766f615.png[/img]
执行完成后,将在flume-ng-dist文件夹的target目录下生成apache-flume-1.7.0-SNAPSHOT-bin等文件夹,apache-flume-1.7.0-SNAPSHOT-bin文件夹下的文件即可直接拿来使用

你可能感兴趣的:(企业架构)