这几天忙着项目上线,终于忙的差不多了,看着自己的劳动成果其实也挺开心的,加油加油!!! 😃 😦 😐
基础案例
netcat-memory-logger
# agent = a1 a1下有一个source叫r1
a1.sources = r1
# agent = a1 a1下有一个chanel叫c1
a1.channels = c1
# agent = a1 a1下有一个sink叫k1
a1.sinks = k1
# source
a1.sources.r1.type = netcat
a1.sources.r1.bind = HadoopNode00
a1.sources.r1.port = 6666
# channel
a1.channels.c1.type = memory
# sink
a1.sinks.k1.type = logger
# 连接channel 和 sources
a1.sources.r1.channels = c1
# 连接sinks 和 sources
a1.sinks.k1.channel = c1
使用TCP相关的协议,开启了一个服务端,有对应的使用TCP相关协议的客户端向次类型的source 发送信息
SpoolingDir-Mem-File_Roll
SpoolingDir类型的source在读取完成文件后,会将本地的文件进行更名(更名的后缀可以自定义),当更名完成后,对有使用的当前后缀进行相应的操作的话,SpoolingDir类型的source是不会对文件做任何读取的动作,但是只要不是这个后缀就会直接读取,然后再次改名为此后缀
# a1下有一个channels叫做ch1
a1.channels = ch1
# a1下有一个sources叫做src1
a1.sources = src1
# a1下有一个sinks叫做sk1
a1.sinks = sk1
# a1下有一个sources叫做src1 的type是spooldir
a1.sources.src1.type = spooldir
# a1下有一个sources叫做src1 的文件夹源是/root/logs
a1.sources.src1.spoolDir = /root/logs
# a1下有一个sources叫做src1 的读取完成后文件后后缀定义为.done
a1.sources.src1.fileSuffix = .done
# channel
a1.channels.ch1.type = memory
# sink
# a1下有一个sinks叫做sk1 类型是file_roll
a1.sinks.sk1.type = file_roll
# a1下有一个sinks叫做sk1 文件写出路径为 /root/logsdone
a1.sinks.sk1.sink.directory = /root/logsdone
# a1下有一个sinks叫做sk1 文件停止滚动 并且所有数据写入到一个文件中
a1.sinks.sk1.sink.rollInterval = 0
a1.sources.src1.channels = ch1
a1.sinks.sk1.channel = ch1
./bin/flume-ng agent --conf conf/ --conf-file conf/demo02SpoolingDir-Mem-File_Roll.conf --name a1 -Dflume.root.logger=INFO,console
Avro-Mem-Logger
在使用Avro的客户端向AvroSource 发送数据的时候,我们发现其实客户端的发送时一次性,会将当前指定的文件夹中的所有数据全部发送到对应的source中,另外在发送完成后,会将原来文件夹的中文件进行更名操作,默认为fileSuffix
Avro类型的客户端所使用的策略基本与SpoolingDir类型的source的读取策略相同
# a1下有一个channels叫做ch1
a1.channels = ch1
# a1下有一个sources叫做src1
a1.sources = src1
# a1下有一个sinks叫做sk1
a1.sinks = sk1
# a1下有一个sources叫做src1 的类型是avro
a1.sources.src1.type = avro
# a1下有一个sources叫做src1 的hostname HadoopNode00
a1.sources.src1.bind = HadoopNode00
# a1下有一个sources叫做src1 的端口 6666
a1.sources.r1.port = 6666
a1.sources.src1.channels = ch1
a1.channels.ch1.type = memory
a1.sinks.sk1.type = logger
a1.sources.src1.channels = ch1
a1.sinks.sk1.channel = ch1
./bin/flume-ng agent --conf conf/ --conf-file conf/demo03Avro-Mem-Logger.conf --name a1 -Dflume.root.logger=INFO,console
使用avro的客户端发送数据
[root@HadoopNode00 apache-flume-1.9.0-bin]# ./bin/flume-ng avro-client --host hadoopNode00 --port 6666 --dirname /root/logs
TAILDIR-File-HDFS
TAILDIR类型的source在读取文件完成后,会接续读取此文件,查看此文件是否有最新的文件内容,如果有最新的文件内容会对此文件的新的内容进行读取
另外我们发现每次读取都是后来新添加进去的文件内容, 那他是怎么做到的?在/root/.flume/taildir_position.json文件记录着当前文件夹每一个文件的读取的偏移量(pos),所以在检测到当前文件和其它的文件的内容有更新时,会从上次记录的偏移量的最后一个加1进行读取
a1.sources = r1
a1.channels = c1
a1.sinks = k1
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /root/logs/.*log.*
a1.channels.c1.type = file
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://HadoopNode00:9000/flume/events/%y-%m-%d/%H
# rollInterval 按照时间秒进行文件滚动 0代表不以时间为标准了
a1.sinks.k1.hdfs.rollInterval = 0
# rollSize 按照文件大小(bytes )进行文件滚动 0代表不以文件大小为标准了
a1.sinks.k1.hdfs.rollSize = 0
# rollCount 按照事件的个数进行文件滚动 0代表不以事件的个数为标准了
a1.sinks.k1.hdfs.rollCount = 0
#使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#存储起来能看的懂(默认为二进制)
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.channel = c1
a1.sources.r1.channels = c1
./bin/flume-ng agent --conf conf/ --conf-file conf/demo04TAILDIR-File-HDFS.conf --name a1 -Dflume.root.logger=INFO,console
EXEC-Mem-Logger
a1.sources = r1
a1.channels = c1
a1.sinks = k1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /root/logs/baizhi.log
a1.channels.c1.type = file
a1.sinks.k1.type =logger
a1.sinks.k1.channel = c1
a1.sources.r1.channels = c1
./bin/flume-ng agent --conf conf/ --conf-file conf/demo05EXEC-Mem-Logger.conf --name a1 -Dflume.root.logger=INFO,console
献给每一个正在努力的我们,就算在忙,也要注意休息和饮食哦!我就是我,一个在互联网跌跌撞撞,摸爬滚打的热忱,给个三连吧~ 还有就是不要只看,多动手才行!努力呀!