agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#配置source1
agent1.sources.source1.type=exec
agent1.sources.source1.command=tail -F /usr/local/nginx/logs/access.log
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = true
agent1.sources.source1.deserializer.outputCharset=UTF-8
agent1.sources.source1.interceptors = i1 i2
agent1.sources.source1.interceptors.i1.regex=POST([\\s\\S]*)
agent1.sources.source1.interceptors.i1.type=regex_filter
agent1.sources.source1.interceptors.i2.type = timestamp
#配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/usr/flume_temp/flume_tmp123
agent1.channels.channel1.dataDirs=/usr/flume_temp/flume_tmp
#配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://****:9000/nginx/%Y/%m/%d
agent1.sinks.sink1.hdfs.filePrefix=.log
#agent1.sinks.sink1.hdfs.path=hdfs://****:9000/nginx/%Y/%m/%d
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=600
agent1.sinks.sink1.hdfs.batchSize=1000
agent1.sinks.sink1.hdfs.rollSize=0
agent1.sinks.sink1.hdfs.rollCount=0
agent1.sinks.sink1.hdfs.rollInterval=0
agent1.sinks.sink1.hdfs.threadsPoolSize=4
agent1.sinks.sink1.hdfs.callTimeout=60000
agent1.sinks.sink1.channel=channel1
配置文件如上,
生成的hadoop文件如下:
现在的问题是hadoop生成的文件时间间隔咋不相同啊 ,14分咋有3个文件同时产生啊
1)确认一下你的hadoop集群的配置中,datanode设置了几台。
2)查看你的备份书是多少,如果使用默认的话,那应该就是3分了。
3)flume收集到的数据是作为客户端,是向hadoop的namenode提交写操作,namenode去查看block分区跟datanode的空间资源,设定那些数据写到那些位置去,客户端拿着的这些信息后,就将原始数据分成block去写各个datanode了。datanode就是为了存储备份数据的,这样的话,最终的数据就会有多分,默认的话会有3分写的时间肯定是有差异的,主备份写完后,从备份就是同步过去的,时间上就有差异。
引用来自“漓江”的评论
1)确认一下你的hadoop集群的配置中,datanode设置了几台。
2)查看你的备份书是多少,如果使用默认的话,那应该就是3分了。
3)flume收集到的数据是作为客户端,是向hadoop的namenode提交写操作,namenode去查看block分区跟datanode的空间资源,设定那些数据写到那些位置去,客户端拿着的这些信息后,就将原始数据分成block去写各个datanode了。datanode就是为了存储备份数据的,这样的话,最终的数据就会有多分,默认的话会有3分写的时间肯定是有差异的,主备份写完后,从备份就是同步过去的,时间上就有差异。
引用来自“leh”的评论
原因很简单,你配置flume的文件切分方式同时指定了多种类型造成的,你仔细看看上面的配置,是否有按照文件大小、按照时间间隔切分等同时都配置了吧目前是这样的
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,就解析该文件内容,然后写入到channle。写入完成后,标记该文件已完成或者删除该文件。
#配置source1
agent1.sources.source1.type=exec
agent1.sources.source1.command=tail -F /usr/local/nginx/logs/access.log
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = true
agent1.sources.source1.deserializer.outputCharset=UTF-8
agent1.sources.source1.interceptors = i1 i2
agent1.sources.source1.interceptors.i1.regex=POST([\\s\\S]*)
agent1.sources.source1.interceptors.i1.type=regex_filter
agent1.sources.source1.interceptors.i2.type = timestamp
#配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/usr/flume_temp/flume_tmp123
agent1.channels.channel1.dataDirs=/usr/flume_temp/flume_tmp
#配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://xxxx/nginx/%y-%m-%d
agent1.sinks.sink1.hdfs.filePrefix=%H%M
agent1.sinks.sink1.hdfs.fileSuffix=.log
#agent1.sinks.sink1.hdfs.path=hdfs://xxxx/nginx/%Y/%m/%d
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=600
agent1.sinks.sink1.hdfs.batchSize=100
#agent1.sinks.sink1.hdfs.rollInterval = 600
# File size to trigger roll, in bytes (0: never roll based on file size)
#agent1.sinks.sink1.hdfs.rollSize = 128000000
#agent1.sinks.sink1.hdfs.rollCount = 0
#agent1.sinks.sink1.hdfs.batchSize = 1000
agent1.sinks.sink1.hdfs.threadsPoolSize = 10
agent1.sinks.sink1.hdfs.idleTimeout = 0
#agent1.sinks.sink1.hdfs.round=true
#agent1.sinks.sink1.hdfs.roundValue=10
#agent1.sinks.sink1.hdfs.roundUnit=minute
#agent1.sinks.sink1.hdfs.rollSize=0
#agent1.sinks.sink1.hdfs.rollCount=0
#agent1.sinks.sink1.hdfs.rollInterval=0
#agent1.sinks.sink1.hdfs.threadsPoolSize=4
agent1.sinks.sink1.hdfs.callTimeout=60000
agent1.sinks.sink1.hdfs.minBlockReplicas=1
agent1.sinks.sink1.channel=channel1
但生成的文件还是这么多 什么情况啊
hdfs.rollSize这个参数你配置的都注释掉了,默认使用1024字节大小滚动一次,你这个估计是生成的文件太大了。