欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:976
  2. 浏览总数:11,916,894
  3. 评论:3931
  4. 分类目录:106 个
  5. 注册用户数:6090
  6. 最后更新:2018年12月11日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

基于flume-ng 1.4.0的TailSource程序开发

  写在前面的话,最近发现有很多网站转载我博客的文章,这个我都不介意的,但是这些网站转载我博客都将文章的出处去掉了,直接变成自己的文章了!!我强烈谴责他们,鄙视那些转载文章去掉出处的人!所以为了防止这些,我以后发表文章的时候,将会在文章里面加入一些回复之后才可见的内容!!请大家不要介意,本博客Hadoop相关的文章都是原创,每篇文章都花了很长时间编写,这些都是无偿的,所以转载本文章请标明出处:
  本篇博客地址:《基于flume-ng 1.4.0的TailSource程序开发》: https://www.iteblog.com/archives/1034
  博客地址:过往记忆:https://www.iteblog.com

  用过Flume 0.9.4的用户应该知道,在它里面自带了一个TailSource以及TailDirSource,这个Source是负责读取一个文件,并一行一行的发送到sink端,而在flume-ng 1.4.0里面没有自带TailSource,更别说TailDirSource了,虽然我们可以在flume-ng 1.4.0里面用exec的tail -F来一行一行的发送文件,但是还是不太好。而且公司最近flume需要升级,之前的程序用到了TailSource和TailDirSource,没办法只能再次开发了。在flume-ng里面开发一个source需要遵循一定的规则,我们可以通过以下两种方法来开发自己的source:

package org.apache.flume;

import org.apache.flume.conf.Configurable;
import org.apache.flume.source.AbstractSource;

/**
 * User: wyp
 * https://www.iteblog.com/archives/1034
 * 版权所有,翻版不究
 * 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干活
 * Date: 14-5-20
 * Time: 下午11:15
 */
public class TailSource extends AbstractSource implements EventDrivenSource,
        Configurable {
    @Override
    public void configure(Context context) {

    }

    @Override
    public synchronized void start() {

    }

    @Override
    public synchronized void stop() {

    }
}

或者

package org.apache.flume;

import org.apache.flume.conf.Configurable;
import org.apache.flume.source.AbstractSource;

/**
 * User: wyp
 * https://www.iteblog.com/archives/1034
 * 版权所有,翻版不究
 * 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干活
 * Date: 14-5-20
 * Time: 下午11:15
 */
public class TailSource extends AbstractSource implements Configurable, 
                                PollableSource {
    @Override
    public void configure(Context context) {

    }

    @Override
    public Status process() throws EventDeliveryException {
        return null;
    }

    @Override
    public synchronized void start() {

    }

    @Override
    public synchronized void stop() {

    }
}

  这两个类虽然继承关系不一样,但是都可以实现。下面的方法中多了一个process()方法,这个方法在PollableSourceRunner类中会被一个线程不断的调用。
  关于如何具体开发TailSource,这个我就不介绍了。下面主要介绍一下如何使用我这个TailSource,在本文的后面会附上TailSource插件的下载地址,大家如有需要可以自行下载使用。TailSource支持waitTime、file、startFromEnd以及offset四个参数的配置。

  1. waitTime:指的是隔多久读一次文件,程序是按照一块一块的读取文件内容到缓冲区,然后一行一行的解析;可以不配置,默认1秒读一次。
  2. file:指的是需要读取的文件绝对路径,一定需要配置;
  3. startFromEnd:是否从文件结尾处读取,默认为false;
  4. offset:从offset偏移量开始读取,可以不配置,默认是从偏移量为0开始读。

目前本版本的TailSource不支持正则表达式的配置。如你需要使用,可以按照下面的配置进行:

agent.sources = r1
agent.sources.r1.type = org.apache.flume.TailSource
agent.sources.r1.channels = channel
agent.sources.r1.waitTime = 100
agent.sources.r1.file = /export1/spark/apache-flume-1.4.0-bin/test
agent.sources.r1.startFromEnd = false
agent.sources.r1.offset = 0

然后就可以监听到test文件的变化,并放到channel里面。下面是TailSource的下载地址
点击进入下载

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【基于flume-ng 1.4.0的TailSource程序开发】(https://www.iteblog.com/archives/1034.html)
喜欢 (30)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(58)个小伙伴在吐槽
  1. 学习一下 💡
    utopia [[$¥2017-01-22 10:34 回复
  2. 学习一下,flume企业中不知道常是监控目录还是文件。
    风吹草2016-03-02 20:01 回复
    • 都有,看你具体使用情况。本文的TailSource是监控文件的。
      w3970907702016-03-02 20:03 回复
      • 具体情况?能不能举个场景?谢谢。
        风吹草2016-03-02 20:06 回复
  3. 请问代码能共享吗?
    多啦a梦2016-01-20 12:19 回复
  4. 学习一下
    那个半仙儿2015-11-08 19:38 回复
  5. 学习一下
    小__夏__2015-10-27 09:38 回复
  6. 遇到需要TailDirSource的场景,借鉴一下,谢谢
    嗜寂者2015-10-09 20:39 回复
  7. 正好最近开始搞flume,能放出tailsource的源码么?
    colacat9112015-03-18 16:38 回复
  8. 希望楼主分享下设计思路,之前自己尝试的写过,效率好低。。。。
    fantasyit2015-03-13 14:18 回复
  9. 楼主能说下的设计思路吗???
    cwtree2015-01-19 09:11 回复
  10. 最近也想自己尝试下写一个tailsource实现一些特定的功能,要是楼主能将开发过程记录下来参考下就好了
    fc2014-10-23 11:04 回复
  11. 用楼主的tailSource会出现Implementing class的问题,不知道应该如何解决呢?
    xlows2014-09-27 15:15 回复
  12. 很好,希望楼主能够详细说说开发过程
    b0lixin2014-08-07 17:33 回复
  13. 嗯 不错啊
    sun2014-08-06 20:22 回复
  14. 被救一命
    管浩亮2014-07-30 20:58 回复
  15. 能否提供一下src
    本用户已存在2014-07-30 11:14 回复
  16. tail -F支持变量后,不能自动切换
    向雅2014-07-22 17:32 回复
  17. 写得不错
    壮壮2014-07-21 11:59 回复
  18. hao~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    test2014-07-19 09:30 回复
  19. LZ好人
    合肥2014-07-18 14:19 回复
  20. 看看
    sandyfog2014-07-17 12:19 回复
  21. 学习,谢谢分享
    nk2014-07-16 16:43 回复
  22. 感谢分享
    developer2014-07-10 22:54 回复
  23. 看看,谢谢分享!!
    c点2014-07-10 10:26 回复
  24. 谢谢分享!!
    spring_pear2014-07-09 11:47 回复
  25. 刚学习Flume
    skywgs2014-07-09 08:37 回复
  26. 想看一下评论
    打断点2014-07-08 10:53 回复
  27. 最近在学习这个软件产品,感谢楼主写了这么多文章。
    jianghua2014-07-03 13:04 回复
  28. 看看,支持楼主
    wdf2014-07-02 17:16 回复
  29. 回复了一遍,没看到啊
    wxwahu2014-06-30 14:21 回复
  30. 看看,支持楼主
    wxwahu2014-06-30 14:19 回复
  31. 支持楼主!!!!
    sss2014-06-24 16:24 回复
  32. 我在使用最新的Flume遇到Tail -F命令时,会无缘无故停止发送数据,一直纠结不知道该如何解决,不知道楼主的这个自己实现Tail -F的功能是否可以解决该问题?“
    杨超2014-06-24 15:51 回复
    • 我这个只要文件里面有数据就可以发送。
      w3970907702014-07-11 09:51 回复
  33. 点赞。
    fysoft20062014-06-20 13:26 回复
  34. 不错
    oc2014-06-10 11:11 回复
  35. 看看怎么弄的
    tyronecai2014-06-06 14:46 回复
  36. 能把tailDirSource也放出来么?
    fanlu73112014-05-28 09:03 回复
    • TailDirSource已经开发完成,不过我们做了修改,加入了断点续传以及恢复等功能,不过我可以将最原始的放出来。
      w3970907702014-05-28 14:06 回复
      • 那很强大啊,期待……
        fanlu73112014-05-29 16:33 回复
      • 请问你们开发的tailSource支持断点续传吗?
        晨磊的微博2015-06-16 15:46 回复
        • 我开发的TailSource支持断点续传,每条日志都可以追踪来源。
          w3970907702015-06-16 16:20 回复
          • 现在我需要使用flume实时收集日志,使用tail -F 会遇到,如果agent死掉重启后不能从断点处继续收集日志的问题,请问你的tailSource是否在agent重启时,可以继续从断点处收集呢?
            晨磊的微博2015-06-16 17:06
        • 支持断点续传意思就是无论是你Flume挂掉了,还是你机器挂掉了,都可以从断点恢复继续发送数据。
          w3970907702015-06-16 17:10 回复
          • 感谢,强大
            晨磊的微博2015-06-16 17:34
          • 可为何我测试的并不支持断点续传呢?可以加QQ,详聊吗
            晨磊的微博2015-06-16 20:01
        • Sorry,忘了和你说,这个公开的版本不支持断点续传,只能支持简单的实时发送数据。
          左手牵右手TEL2015-06-16 20:08 回复
          • what ? 还有收费版的?
            晨磊的微博2015-06-16 20:09
          • 不收费,只不过这个版本公司不让公布。
            w3970907702015-06-17 09:41
          • 可以加QQ 私聊下吗,想请教几个问题QQ:314109012
            晨磊的微博2015-06-17 10:13
  37. 看看
    fanlu73112014-05-28 08:51 回复
  38. 很不错,了解一下和exec source的区别
    fengh2014-05-26 10:28 回复
    • exec 使用tail -F + file的方式太不靠谱了,经常自己就停止采集数据,没有遇到过么?
      杨超2014-06-24 15:52 回复
  39. 很不错,支持一下
    wyp2014-05-25 13:26 回复
  40. ·看看
    看看2014-05-22 14:09 回复
  41. 看看
    宋文彬2014-05-21 17:45 回复
  42. 写的很好
    1232014-05-21 10:06 回复