2014-07-11 120 views
1

我正在做一些實驗來感受水槽。下面是我的配置文件。Apache Flume爲每一行寫入新文件

agent.channels.memory-channel.type = memory 

agent.sources.tail-source.type = exec 
agent.sources.tail-source.command = tail -F /root/test.txt 
agent.sources.tail-source.channels = memory-channel 

agent.sinks.hdfs-sink.channel = memory-channel 
agent.sinks.hdfs-sink.type = hdfs 
agent.sinks.hdfs-sink.hdfs.path = hdfs://10.0.7.111/tflume 
agent.sinks.hdfs-sink.hdfs.fileType = DataStream 

agent.channels = memory-channel 
agent.sources = tail-source 
agent.sinks = hdfs-sink 

每行使用vi命令時看看水槽記錄它在HDFS創建新的文件/目錄tflume添加到test.txt文件。爲什麼這樣 ?

我期待flume追加到我現有的文件中,同時,通過查看日誌,寫入hdfs的數據也會說太多時間。

感謝提前回復。

+1

這個問題可能是http://stackoverflow.com/questions/17724391/flume-ng-and-hdfs的重複。在這裏看到我的答案:http://stackoverflow.com/a/17745182/217079 – Dmitry

回答

2

這是在使用HDFS作爲接收器時臭名昭着的'許多小HDFS文件'問題。

這個問題很容易解決,確保至少爲flume.conf中的HDFS接收器設置屬性rollSize,rollCount,rollInterval和idleTimeout。如果你沒有設置它們,Flume默認爲非常低的值。大多數情況下,rollSize(僅限1024 kb !!)的默認值將決定在1個HDFS文件中只記錄3到4條日誌記錄。 默認值可以通過將它們的值設置爲0來方便地覆蓋,但是如果您忘記了這些默認值將會導致一些實際行爲。

#ALWAYS PROVIDE THESE OVERRIDES OF THE DEFAULTS !! 

agent3.sinks.snk1.hdfs.rollSize = 0 
agent3.sinks.snk1.hdfs.rollCount = 0 
agent3.sinks.snk1.hdfs.rollInterval = 0 
agent3.sinks.snk1.hdfs.idleTimeout = 0 

#SET TO YOUR NEEDS 

#rollCount writes to hdfs every 20 lines 
agent3.sinks.snk1.hdfs.rollCount = 20