flume ng是在flume og的基础上做的一个非常大的重构,基本上属于重写了。他和OG相比,简单了不少,但是随之用于管理的功能也少了不少,因为现在使用的是基于plugin的模式来设计,所以管理的功能可能会留待以后由第三方来做,flume只实现最核心的“传输”功能。OG中先前的master,zookeeper等都没有了,NG中只能使用本地的一个properties文件来配置
安装上之后,写个配置文件简单尝试了一下,source使用spoolDir,channel使用memory,sink使用hdfs,结果问题不断,只能说使用flume做数据采集,“坑很深”,或很考验“经验”
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /var/log/apache/flumeSpool
a1.sources.r1.fileHeader = true
a1.sources.r1.interceptors = i1 i2
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.HostInterceptor$Builder
a1.sources.r1.interceptors.i1.preserveExisting = false
a1.sources.r1.interceptors.i1.hostHeader = hostname
a1.sources.r1.interceptors.i2.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://server240:9000/tmp/flume
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.idleTimeout=60
a1.sinks.k1.hdfs.rollSize = 0
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.writeFormat = Text
a1.sinks.k1.hdfs.fileType = DataStream
a1.channels.c1.type = file
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
首先,拷贝到同步路径下时,不能使用cp,因为文件还没有拷贝完,flume就会识别到新生成了一个文件,于是开始同步。。。所以最好使用cp -s,或ln -s建立一个链接
其次,如果仍进去一个二进制的文件,报错不断,可能因为spoolDir采用的是readLine的方式,在二进制文件上readLine,不清楚会发生什么问题。。。似乎和事务有关,反正传输完之后从hdfs里面取出文件,和源文件对比发现MD5变了,将memory channel换成file channle,结果依然不对。
另外,传输1G的存文本文件,使用spoolDir+memory,性能也不敢恭维
可能我使用的方式不对,网上说传输文件应该使用avro-client的方式,但是还没有尝试,但是不管如何,要想使用flume1.3来做采集,需要深入的仔细研究清楚才可以进行,否则容易栽跟头。。。有深入研究过的朋友,可以深入探讨一下