简介:这是一篇关于flume的安装和部署已经案例演示的学习笔记博客,主要内容包括:flume安装部署、flume的两个入门案例,分别是:监控端口数据的官方案例与实时监控指定目录下的多个文件追加的文件变化。如有错误的地方,还望批评、改正!!!
目录
flume简述
flume是一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统。同时其实基于流式架构的轻量级服务框架,灵活简单。
主要用于大数据里数据传输阶段。
flume安装部署
安装相关地址
安装部署
1、准备好安装包到自己方压缩包的目录,我的是在:/home/lqs/software/目录下
2、解压
[lqs@bdc112 software]$ pwd
/home/lqs/software
[lqs@bdc112 software]$ tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /home/lqs/module/
3、修改名称
[lqs@bdc112 software]$ cd ../module/
[lqs@bdc112 module]$ mv apache-flume-1.9.0-bin/ flume-1.9.0
4、将lib文件下的guava-11.0.2.jar删除,使flume可以兼容hadoop 3.1.3
[lqs@bdc112 module]$ rm flume-1.9.0/lib/guava-11.0.2.jar
5、修改conf下的log4j.properties文件
[lqs@bdc112 conf]$ pwd
/home/lqs/module/flume-1.9.0/conf
[lqs@bdc112 conf]$ vim log4j.properties
修改成如下的样子
flume入门案例
案例一:监控端口数据官方案例
简介和需求
监控端口数据官方案例。需求:使用flume监听一个端口,收集该端口数据,并打印到控制台。
实现步骤
1、安装netcat工具(如果安装了就不用安装了)
[lqs@bdc112 flume-1.9.0]$ sudo yum install -y nc
2、在flume文件下创建job/nc-flume-log.conf文件
[lqs@bdc112 flume-1.9.0]$ mkdir job
[lqs@bdc112 flume-1.9.0]$ touch nc-flume-log.conf
[lqs@bdc112 flume-1.9.0]$ vim job/nc-flume-log.conf
添加如下内容:
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
来源:http://flume.apache.org/FlumeUserGuide.html
5、先开启flume监听端口
写法一
[lqs@bdc112 flume-1.9.0]$ bin/flume-ng agent -c conf/ -n a1 -f job/taildir-flume-hdfs.conf -Dflume.root.logger=INFO,console
写法二
[lqs@bdc112 flume-1.9.0]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/taildir-flume-hdfs.conf -Dflume.root.logger=INFO,console
参数说明:
--conf:表示配置文件存储在那个目录,默认都是在${FLUME_HOEM}/conf/,该配置命令可以简写成:-c
--name:表示给agent起的名字,这里配置文件起名为a1,该配置命令可以简写成:-n
--conf-file:flume本次启动读取的配置文件是在那个配置文件下,默认是在conf/下,我的在job/下。
注意:
-Dflume.root.logger=INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error。日志参数已经在配置文件中修改了,不再需要重复输入。
6、使用netcat工具箱本机的44444端口发送内容
判断44444端口是否被占用 sudo netstat -nlp | grep 44444
[lqs@bdc112 flume-1.9.0]$ nc localhost 44444
ninhao
OK
flume
OK
#另外一个窗口显示
2021-12-27 14:14:11,148 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:166)] Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
2021-12-27 14:14:41,155 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 6E 69 6E 68 61 6F ninhao }
2021-12-27 14:14:46,816 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 66 6C 75 6D 65 flume }
案例二
简述:实时监控指定目录下的多个追加文件
aildir Source适合用于监听多个实时追加的文件,并且能够实现断点续传。
需求和需求分析
使用flume监听整个目录的实时追加文件,并上传到hdfs
需求分析如下图
实现配置步骤
1、在job目录下创建配置文件taildir-flume-hdfs.conf
[lqs@bdc112 job]$ pwd
/home/lqs/module/flume-1.9.0/job
[lqs@bdc112 job]$ vim taildir-flume-hdfs.conf
并输入以下内容:
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1 f2
# 必须精确到文件,可以写匹配表达式匹配多个文件
a1.sources.r1.filegroups.f1 = /home/lqs/module/flume-1.9.0/files1/.*file.*
a1.sources.r1.filegroups.f2 = /home/lqs/module/flume-1.9.0/files2/.*log.*
# 实现断点续传的文件存放位置 不改有默认位置也能实现断点续传
a1.sources.r1.positionFile = /home/lqs/module/flume-1.9.0/taildir_position.json
# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://bdc112:8020/flume-1.9.0/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = log-
#是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
#设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
#多久生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 30
#设置每个文件的滚动大小大概是128M
a1.sinks.k1.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
2、启动监控文件夹命令
[lqs@bdc112 flume-1.9.0]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/group2/flume02
向文件中添加数据
[lqs@bdc112 files1]$ pwd
/home/lqs/module/flume-1.9.0/files1
[lqs@bdc112 files1]$ echo test >> file7.txt
[lqs@bdc112 files1]$ echo demo >> file8.txt
3、查看数据
注意:
Linux中储存文件元数据的区域就叫做inode,每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。TailDir source使用inode和文件的全路径一起识别同一个文件,所以修改文件名之后如果表达式也能够匹配上,会再重新读取一份文件的数据。
日志里面查看
[lqs@bdc112 logs]$ pwd
/home/lqs/module/flume-1.9.0/logs
[lqs@bdc112 logs]$ tail -n -5 flume.log