因为flume的spooldir不支持子目录文件的递归检测,并且业务需要,所以修改了源码,重新编译


代码修改参考自:http://blog.csdn.net/yangbutao/article/details/8835563

不过在1.4中已经不是修改SpoolingFileLineReader类了,而是apache-flume-1.4.0-src\flume-ng-core\src\main\java\org\apache\flume\client\avro\ReliableSpoolingFileEventReader.java

并且变量directory应该改为spoolDirectory


 1     /*
* @author admln
*
* @date 2015年4月8日 上午9:37:20
*/
private void listDirFiles(List<File> files, File dir, FileFilter filter) {
File[] childs = dir.listFiles(filter);
for (int i = 0; i < childs.length; i++) {
if (childs[i].isFile()) {
files.add(childs[i]);
} else {
if (childs[i].isDirectory()) {
listDirFiles(files, childs[i], filter);
}
}
}
} /**
* Find and open the oldest file in the chosen directory. If two or more
* files are equally old, the file name with lower lexicographical value is
* returned. If the directory is empty, this will return an absent option.
*/
private Optional<FileInfo> getNextFile() {
/* Filter to exclude finished or hidden files */
FileFilter filter = new FileFilter() {
       public boolean accept(File pathName) {
          if ((pathName.getName().endsWith(completedSuffix))
            || (pathName.getName().startsWith("."))) {
            return false;
          }
      return true;
     }
};
// List<File> candidateFiles = Arrays.asList(spoolDirectory.listFiles(filter));
List<File> candidateFiles = new ArrayList<File>();
listDirFiles(candidateFiles, spoolDirectory, filter);

很多没必要的版本就不改,如果少包或者版本不对,即使编译通过了,使用的时候也会报java.lang.Error: Unresolved compilation problem,就要修改重新编译


重新编译的时候可以参考:http://www.iteblog.com/archives/1032
编译命令:

mvn install -Phadoop- -DskipTests -Dtar

会下很多各种jar包,很浪费时间


已经编译好的:http://pan.baidu.com/s/1eQxUDxC    5x9l


还有个比较简单的一点的办法,因为改的flume-ng-core里面的代码,而flume-ng-core是flume-ng的一个子项目,所以直接在flume-ng-core里面执行单独编译,得到target/flume-ng-core-1.4.0.jar,然后替换现有flume-bin/lib/里面的flume-ng-core-1.4.0.jar,也可以实现想要的功能。这个编译基本上不会有什么问题。

现成的:http://pan.baidu.com/s/1CVR3K  989v


在1.5.0中的doc说已经支持子目录的递归读取了但是只有patch,没集成到代码中,也没有kafka sink,所以个人觉得干脆改CDH的flume算了,加上递归,本身有kafka sink

http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.5.0-cdh5.2.5.tar.gz


Flume-ng-1.4.0 spooling source的方式增加了对目录的递归检测的支持的更多相关文章

  1. 【转】Flume(NG)架构设计要点及配置实践

    Flume(NG)架构设计要点及配置实践   Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...

  2. Flume NG 简介及配置实战

    Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

  3. Flume NG高可用集群搭建详解

    .Flume NG简述 Flume NG是一个分布式,高可用,可靠的系统,它能将不同的海量数据收集,移动并存储到一个数据存储系统中.轻量,配置简单,适用于各种日志收集,并支持 Failover和负载均 ...

  4. FLUME NG的基本架构

    Flume简介 Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统.原名是 Flume OG (original generation),但随着 FLume 功能 ...

  5. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  6. 高可用Hadoop平台-Flume NG实战图解篇

    1.概述 今天补充一篇关于Flume的博客,前面在讲解高可用的Hadoop平台的时候遗漏了这篇,本篇博客为大家讲述以下内容: Flume NG简述 单点Flume NG搭建.运行 高可用Flume N ...

  7. Flume NG简介及配置

    Flume下载地址:http://apache.fayea.com/flume/ 常用的分布式日志收集系统: Apache Flume. Facebook Scribe. Apache Chukwa ...

  8. flume ng系列之——flume安装

    flume版本:1.5.0 1.下载安装包: http://www.apache.org/dyn/closer.cgi/flume/1.5.0/apache-flume-1.5.0-bin.tar.g ...

  9. Flume OG 与 Flume NG 的区别

    1.Flume OG:Flume original generation 即Flume 0.9.x版本    Flume NG:Flume next generation ,即Flume 1.x版本 ...

随机推荐

  1. mysql编码详解

    在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true& ...

  2. printf函数重定向

    printf函数底层会调用fputc函数 /*重定向c库函数printf到USART1*/ int fputc(int ch, FILE *f) { /*发送一个字节数据USART1 */ USART ...

  3. 野火STM32 Flash&sd卡模拟U盘

    在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 //mass_mal.c /* Includes ------------------ ...

  4. hdu 1576 A/B (扩展欧几里德简单运用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others) Memory Lim ...

  5. apache配置虚拟主机后,启动速度慢

    apache配置虚拟主机后,启动速度慢且提示“the requested operation has failed” 可以通过在cmd下启动,来查找问题(命令中的“apache2.2”,是服务名,根据 ...

  6. easyui问题小记

    在easyui1.4.3版本中,(其他版本不知道是不是也是这样的),绑定在datagridview上面的数据最好不要是带有特殊符号的字段,不然会导致部分的属性不好用,比如这样的字段  START_DA ...

  7. URAL 2068 Game of Nuts (博弈)

    题意:给定 n 堆石子,每次一个人把它们分成三堆都是奇数的,谁先不能分,谁输. 析:因为每堆都是奇数,那么最后肯定都是要分成1的,那么就把不是1的全加和,然后判断奇偶就OK了. 代码如下: #prag ...

  8. 我对CONTAINING_RECORD宏的详细解释

    宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, ...

  9. Jmeter_初步认识随笔

    1. 简介 Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件(例如web应用程序).它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Ja ...

  10. 转载:Erlang 资源

    Erlang资源 erlang豆瓣广播