大数据实时日志收集框架Flume案例之抽取日志文件到HDFS

上节介绍了Flume的作用以及如何使用,本文主要通过一个简单的案例来更好地运用Flume框架。在实际开发中,我们有时需要实时抽取一些文件夹下的文件来分析,比如今天的日志文件需要抽取出来做分析。这时,如何自动实时的抽取每天的日志文件呢?我们可以使用Flume来完成这一项工作。

案例需求:假设需要分析一些日志文件,在一个目录下每天会生成一个日志文件,以.log后缀结尾的文件表示正在写,没有更新完成,所以不需要收集该文件,其他的所有文件都需要收集,一旦该目录发生变化,写入了新文件,都要实时的抽取,将其抽取出来存储到HDFS上,HDFS上的存储文件以时间为目录名来存储抽取出来的数据。

下面,我们来实现上面所说的案例:

Sources需要用到Spooling Directory Source,什么是Spooling Directory Source呢?它会监听某个目录下的新增文件,将文件读取出来,实现日志信息的收集,实际生产结合log4j使用,被传输结束的文件会修改后缀名。默认加后缀.COMPLETED。

Channel使用File Channel,因为将数据放在内存中传输不安全,以本地文件为缓冲更为安全。

Sinks使用HDFS Sink,将抽取出来的文件存储到HDFS上。

下面,我们来动手操作:
在Flume的安装目录下的conf目录中,创建Flume-app.conf文件,编辑内容如下:

# The configuration file needs to define the sources, 
# the channels and the sinks.
# Sources, channels and sinks are defined per agent, 
# in this case called 'agent'
a3.sources = r3
a3.channels = c3
a3.sinks = k3

#define sources
a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir = /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6-bin/spo_logs
a3.sources.r3.fileSuffix = .spool
a3.sources.r3.ignorePattern = ^(.)*\\.log$

#define channels
a3.channels.c3.type = file
a3.channels.c3.checkpointDir = /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6-bin/filechannel/checkpoint
a3.channels.c3.dataDirs = /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6-bin/filechannel/data

#define sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://hadoop-senior.shinelon.com:8020/user/shinelon/flume/spoolog/%Y%m%d
a3.sinks.k3.hdfs.batchSize = 10
a3.sinks.k3.hdfs.fileType = DataStream
a3.sinks.k3.hdfs.writeFormat = Text 
a3.sinks.k3.hdfs.useLocalTimeStamp = true

#bind sources and sink to channel 
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3

上面的代码很简单,依据官方文档配置的,提一点,因为我们要在HDFS上依据日期来生成目录存储抽取出来的数据,因此需要用(%Y%m%d)表达式来表示,而且还要配置hdfs.useLocalTimeStamp = true。

然后在Flume的安装目录下创建相应的文件夹:
mkdir spo_logs
mkdir filechannel
cd filechannel
cd checkpoint
cd data

然后运行Flume:

bin/flume-ng agent \
--conf conf \
--name a3 \
--conf-file conf/flume-app.conf \
-Dflume.root.logger=DEBUG,console

然后我们复制几份文件到spo_logs文件夹下,它就会立即监控到该目录发生变化,实时抽取,数据,而且.log文件不会被抽取,其他文件被抽取,后缀名也加了.spool:

这里写图片描述
这里写图片描述

至此,我们通过一个简单的案例认识到怎么利用Flume来收集日志信息。

———————–我是可爱的分割线O(∩_∩)O哈哈~—————————————————–

猜你喜欢

转载自blog.csdn.net/qq_37142346/article/details/79999068