在第一篇文章中我們是將log4j的日志輸出到了agent的日志文件當(dāng)中。配置文件如下:
- tier1.sources=source1
- tier1.channels=channel1
- tier1.sinks=sink1
-
- tier1.sources.source1.type=avro
- tier1.sources.source1.bind=0.0.0.0
- tier1.sources.source1.port=44444
- tier1.sources.source1.channels=channel1
-
- tier1.channels.channel1.type=memory
- tier1.channels.channel1.capacity=10000
- tier1.channels.channel1.transactionCapacity=1000
- tier1.channels.channel1.keep-alive=30
-
- tier1.sinks.sink1.type=logger
- tier1.sinks.sink1.channel=channel1
本次我們把log4j的日志直接采集輸出到hdfs中去。需要修改flume.conf中sink的配置:
- tier1.sources=source1
- tier1.channels=channel1
- tier1.sinks=sink1
-
- tier1.sources.source1.type=avro
- tier1.sources.source1.bind=0.0.0.0
- tier1.sources.source1.port=44444
- tier1.sources.source1.channels=channel1
-
- tier1.channels.channel1.type=memory
- tier1.channels.channel1.capacity=10000
- tier1.channels.channel1.transactionCapacity=1000
- tier1.channels.channel1.keep-alive=30
-
- tier1.sinks.sink1.type=hdfs
- tier1.sinks.sink1.channel=channel1
- tier1.sinks.sink1.hdfs.path=hdfs://master68:8020/flume/events
- tier1.sinks.sink1.hdfs.fileType=DataStream
- tier1.sinks.sink1.hdfs.writeFormat=Text
- tier1.sinks.sink1.hdfs.rollInterval=0
- tier1.sinks.sink1.hdfs.rollSize=10240
- tier1.sinks.sink1.hdfs.rollCount=0
- tier1.sinks.sink1.hdfs.idleTimeout=60
簡單說明一下修改的部分,我們將sink的type由logger變?yōu)閔dfs,然后指定輸出path,
默認(rèn)是輸出到HDFS后為sequencefile,里面的內(nèi)容無法直接打開瀏覽,為了便于直觀看到我們輸出的日志信息,所以我這里將fileType為DataStream,
writeFormat=Text,這樣就可以直接打開生成的文件進(jìn)行查看了。
下面幾個(gè)roll開頭的參數(shù)都是用來控制滾動(dòng)日志輸出的,官方文檔上的說明也很詳細(xì),我這里配置的只按文件大小來滾動(dòng)rollSize=10240,也就是10K滾動(dòng)生成一個(gè)新的文件用來接收新的EVENTS。實(shí)際中這個(gè)Size應(yīng)該更大一些,我覺得設(shè)置成HDFS的blocksize大小應(yīng)該挺合適的。
idleTimeout設(shè)置為60秒(默認(rèn)值為0),這里面的原理是這樣的,flume里面每生成一個(gè)接收文件時(shí)的命名規(guī)則如:FlumeData.1406251462179.tmp,.tmp表示這個(gè)文件正在被使用來接收EVENTS,當(dāng)滿10K之后,這個(gè)文件會(huì)被rename成FlumeData.1406251462179,把.tmp后綴去掉,但是如果你停止了應(yīng)用程序后,F(xiàn)lumeData.1406251462179.tmp還沒滿10K,按照默認(rèn)的idleTimeout設(shè)置,不會(huì)將它rename,也就是.tmp后綴一直在,造成了這個(gè)文件一直在使用當(dāng)中的一個(gè)假象,這是有問題的,我們?cè)O(shè)置idleTimeout=60,即60秒后這個(gè)文件還沒有被寫入數(shù)據(jù),就會(huì)關(guān)閉它然后rename它去掉.tmp,以后新進(jìn)來的events,會(huì)新開一個(gè).tmp文件來接收。
我們?cè)龠\(yùn)行第一篇文章中的那個(gè)示例應(yīng)用程序,然后去path指定的目錄下面就能看到log4j輸出的日志信息了。
補(bǔ)充注意點(diǎn)(針對(duì)cm安裝的flume):
首先在hdfs上創(chuàng)建/flume目錄:hadoop fs -mkdir /flume
給該目錄授權(quán)給flume用戶和組:hadoop fs -chown -R flume:flume /flume
注意給目錄授權(quán)很重要,不然會(huì)報(bào)錯(cuò)。
|