[ xcly原创于iteye,见http://xcly.iteye.com ]
年初团队接了搭建公司Hadoop平台的研发计划,负责公司产品日志的收集,分析两个工作。
日志收集准备搭建flume(0.9.3)这个分布式日志收集集群.背景介绍完毕,马上开始。
Flume分为agent,collector,master三个概念节点,agent负责收集日志,发到collector, collector一般负责接收agent发过来的事件流,写到存储器,这里一般是hdfs. master负责配置及通信管理,类似于hadoop中的NameNode,是心脏,是整个集群控制器。
此次业务收集的日志主要是公司上千台服务器的产品日志,包括访问日志,搜索日志,下载日志,全部要入到hdfs, agent收集日志的source准备用tailDir来处理,今天我们就来看看tailDir的实现。
tailDir为EventSource的一种方式,source指日志信息产生源,在SourceFactoryImpl定义了我们可以使用的各种事件源,SourceFactoryImpl集成SourceFactory,是典型的工厂方法,通过getSource方法返回EventSource。 这里getSource的实现方法并不是简单的返回具体EventSource实现类,而是调用SourceBuilder的build方法返回。 SourceBuilder的实现类似于工厂方法,只是在每一个EventSource都必须含有builder的静态方法返回具体SourceBuilder的实现,这种方式实现有一定的优雅性,各个EventSource封装了自己对参数的不同处理,又可以根据不同的情况调用不同的构造函数,甚至是调用另一个EventSource的实现。
tailDir的实现类为TailDirSource, 有4个参数,dir要监听的文件夹,regex正则表达式限定命名文件,startFromEnd启动时是否从文件尾开始读取,recurseDepth要监听的文件夹级数。 在配置tailDir的时候容易被flume user guide误导,犯一个错误,参数的传递不需要参数名=,直接用逗号隔开的配置值即可,否则是使用默认值的。而且四个参数的顺序是固定的,必须是dir,regex,startFromEnd,recurseDepth,如果只使用前两个,可只传递两个参数,如果要使用recurseDepth,必须传递4个参数。
TailDirSource对文件的监听调用 DirWatcher实现,在open方法中调用,每一个文件夹包括子文件夹对应一个DirWatcher实例,而DirWather用Periodic监听文件夹,每250毫秒遍历文件夹下所有文件一次, 同第一次新建DirWatcher实例一样,用fileCreated方法新建Cursor,Cursor是读取遍历文件的关键类。
TailDirSource open方法还新建了TailSource实例,而TailSource新建了TailThread线程,TailThread线程不断循环从Cursor队列数组中遍历读取每一行事件,放到TailSource的队列中中。而TailDirSource 的next方法调用TailSource的next方法, 每100ms从TailSource的队列中取事件。主线程取数据,分线程放入数据。
Cursor是读取文件信息的关键类,核心是用RandomAccessFile来读取文件,RandomAccessFile支持任意位置的随机读取,非常强大。默认每次是文件开头或者文件结尾读取,我们此次对于过大的文件加入了文件点读取记录功能,防止重复读取。
分享到:
相关推荐
flume 1.8所有源代码 编译通过版 附 maven3.5.2 安装包 解压配置maven,利用命令行进行编译,导入eclipse,可用于源代码查看,搭建flume远程测试环境
flume源码
电商数仓项目(八) Flume(2) 拦截器开发源代码
Flume读取数据库JDBC源程序,这样Flume就可以读取关系型数据作为数据源,通过简单配置即可实现数据库连接
flume1.6 es5.2.2
让你快速认识flume及安装和使用flume1 5传输数据 日志 到hadoop2 2 中文文档 认识 flume 1 flume 是什么 这里简单介绍一下 它是 Cloudera 的一个产品 2 flume 是干什么的 收集日志的 3 flume 如何搜集日志 我们把...
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...
flume kafka storm集成源代码和文档介绍
Flume1.6.0入门:安装、部署、及flume的案例
Apache Flume 是一个分布式、高可靠、高可用的用来收集、聚合、转移不同来源的大量日志数据到中央数据仓库的工具 Apache Flume是Apache软件基金会(ASF)的顶级项目 Event是Flume定义的一个数据流传输的最小单元。...
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...
flume-ng安装
http://blog.csdn.net/m0_37739193/article/details/78779052这篇文章中所需的代码
Flume NG是Cloudera提供的一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。由原来的Flume OG到现在的Flume NG,进行了架构重构,...
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...
01_Flume的介绍及其架构组成 02_Flume的安装部署 03_Flume的测试运行 04_Flume中配置使用file channel及HDFS sink 05_Flume中配置HDFS文件生成大小及时间分区 06_Flume中配置Spooling Dir的使用 07_Flume中...
尚硅谷大数据技术之Flume
Flume学习文档(1){Flume基本概念、Flume事件概念与原理}。 记录我的学习之旅,每份文档倾心倾力,带我成我大牛,回头观望满脸笑意,望大家多多给予意见,有问题或错误,请联系 我将及时改正;借鉴文章标明出处,谢谢
flume集群环境搭建,详细讲解,图文并茂,包括flume信息监控和众多文章链接