Flume 基本组成架构
Flume 事务
1.数据类型
两个:日志数据 业务数据
2.日志数据---->
3.数据如何到我们的HDFS---->flume(日志)
4.flume:
三个组件
agent(是一个JVM进程) 主要有3个部分组成,Source Channel Sink
event
5.source:4个
nc(netcat)
exec
sp(spooldir) 适用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;
taildir(最重要) 实时监控目录下的多个追加文件,并且能够实时断点续传。
6.channel(位于Source和Sink之间的缓冲区):
分为两种file channel和memory channel
file(主要用于金融等重要数据,不容易数据丢失)
memory(选它!选它!)
7.sink (写入到存储或者发送到另一个 flume agent)
logger (打印到控制台,测试的时候用的)
hdfs ()
Describe the sink
----类型 不可变
a2.sinks.k2.type = hdfs
#路径:8020 是namenode通信端口 (如果不对的话去查xml文件,或者去网页面看)core-site.xml
a2.sinks.k2.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = logs-
#是否对时间戳取整
a2.sinks.k2.hdfs.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳,因为我们自己演示的时候是没有日志数据的,所以我们为了格式化时间戳,使用了本地时间戳 但是!!!但是在实际工作中 这个一定不能设置!!
#如果设置了,昨天产生的日志,在昨天的日志产生完,才会采集,如果采用本地时间戳,昨天的日志就会放在今天的文件夹,所以不可以设置
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
#第一种情况100条往hdfs里面写一次
#第二种情况,一条数据来了,等了一段时间,迟迟不来第二条,计算机就不等了,就给hdfs写了,它很快的。
a2.sinks.k2.hdfs.batchSize = 100
#刷写是sink往hdfs交互的参数
#设置文件类型,可支持压缩
a2.sinks.k2.hdfs.fileType = DataStream
#各种压缩格式,都是在这里设置,上面的是文本类型的,方便演示的时候观察
#多久生成一个新的文件
a2.sinks.k2.hdfs.rollInterval = 60
#在实际工作中,这个不设置!!!这里之所以设置,是为了演示
#设置每个文件的滚动大小,#127M左右
a2.sinks.k2.hdfs.rollSize = 134217700
#是hdfs自己生成,如果来数据,hdfs自己什么时候新建新文件的时机
#文件的滚动与Event数量无关
a2.sinks.k2.hdfs.rollCount = 0
8.flume事务
1. put 是source和channel之间发生关系
2. take 是channel和sink之间发生关系
a3.channels.c3.type = memory
a3.channels.c3.capacity = 1000 (channel的容量单位是event)
a3.channels.c3.transactionCapacity = 100
(事务的容量的大小和putlist takelist的大小是一样的 还和transaction的大小是一样的)
(事务容量的大小=putlist=takelist=transaction)
(事务容量的大小不可以大于capacity的总容量
transactionCapacity=putlist=takelist =transaction
capacity =transactionCapacity 集群性能比较好的时候,或则说你比较追求速度的时候。