因为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. HDU 5869 Different GCD Subarray Query (GCD种类预处理+树状数组维护)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 问你l~r之间的连续序列的gcd种类. 首先固定右端点,预处理gcd不同尽量靠右的位置(此时gc ...

  2. CreateWaitableTimer和SetWaitableTimer函数(定时器)

    用户感觉到软件的好用,就是可以定时地做一些工作,而不需要人参与进去.比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物.要想 实现这些功能,就可以使用定时器的API函数CreateWai ...

  3. 无责任Windows Azure SDK .NET开发入门篇一[Windows Azure开发前准备工作]

    一.Windows Azure开发前准备工作 首先我们需要了解什么是 Azure SDK for .NET?微软官方告诉我们:Azure SDK for .NET 是一套应用程序,其中包括 Visua ...

  4. Python学习入门基础教程(learning Python)--5.2 Python读文件基础

    上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...

  5. 【转】 解决IllegalStateException: Can not perform this action after onSaveInstanceState

    今天使用Fragment的时候,出现了这个错误 IllegalStateException: Can not perform this action after onSaveInstanceState ...

  6. MFC 学习 之 工具栏的添加(一)

    最终实现的效果图: 步骤一:接下来在资源视图中添加一个ToolBar工具栏(具体怎么添加在这儿就不详细讲解了!)添加后的ToolBar以及工具栏中每个按钮 所命名的ID如下:(可以自定义,只要不重名就 ...

  7. 10分钟学会基于ASP.NET的 JQuery实例 (转)

    本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再 ...

  8. Codeforces Round #140 (Div. 1) D. The table 构造

    D. The table 题目连接: http://www.codeforces.com/contest/226/problem/D Description Harry Potter has a di ...

  9. cdoj 25 点球大战(penalty) 模拟题

    点球大战(penalty) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...

  10. Struts2中属性驱动与模型驱动

    属性驱动: 1.概念 能够利用属性驱动获取页面表单元素的内容 2.步骤 1.在action中声明属性,属性的名称和页面元素中name属性的值保持一致 2.action中的属性必须有set和get方法 ...