Flume 史上最全面的大数据学习第十篇(四)来了解一下flume的一些基础案例吧

这几天忙着项目上线,终于忙的差不多了,看着自己的劳动成果其实也挺开心的,加油加油!!! 😃 😦 😐

基础案例

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

献给每一个正在努力的我们,就算在忙,也要注意休息和饮食哦!我就是我,一个在互联网跌跌撞撞,摸爬滚打的热忱,给个三连吧~ 还有就是不要只看,多动手才行!努力呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值