Flume 实时收集nginx的日志放到hadoop去

y000n520 发布于 2016/09/11 11:00
阅读 3K+
收藏 0

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个文件同时产生啊


加载中
0
漓江
漓江

1)确认一下你的hadoop集群的配置中,datanode设置了几台。

2)查看你的备份书是多少,如果使用默认的话,那应该就是3分了。

3)flume收集到的数据是作为客户端,是向hadoop的namenode提交写操作,namenode去查看block分区跟datanode的空间资源,设定那些数据写到那些位置去,客户端拿着的这些信息后,就将原始数据分成block去写各个datanode了。datanode就是为了存储备份数据的,这样的话,最终的数据就会有多分,默认的话会有3分写的时间肯定是有差异的,主备份写完后,从备份就是同步过去的,时间上就有差异。

0
y000n520
y000n520

引用来自“漓江”的评论

1)确认一下你的hadoop集群的配置中,datanode设置了几台。

2)查看你的备份书是多少,如果使用默认的话,那应该就是3分了。

3)flume收集到的数据是作为客户端,是向hadoop的namenode提交写操作,namenode去查看block分区跟datanode的空间资源,设定那些数据写到那些位置去,客户端拿着的这些信息后,就将原始数据分成block去写各个datanode了。datanode就是为了存储备份数据的,这样的话,最终的数据就会有多分,默认的话会有3分写的时间肯定是有差异的,主备份写完后,从备份就是同步过去的,时间上就有差异。

那为什么有时候是1份文件呢 
0
leh
leh
原因很简单,你配置flume的文件切分方式同时指定了多种类型造成的,你仔细看看上面的配置,是否有按照文件大小、按照时间间隔切分等同时都配置了吧
0
y000n520
y000n520

引用来自“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

但生成的文件还是这么多 什么情况啊

0
storylistener
storylistener

hdfs.rollSize这个参数你配置的都注释掉了,默认使用1024字节大小滚动一次,你这个估计是生成的文件太大了。

返回顶部
顶部