flume學習(二):如何找到cm安裝的flume的配置文件

問題導讀
1、如何將log4j的日誌輸出到agent的日誌文件當中?
2、怎麼將sink的type由logger變爲hdfs?
3、報錯?你給目錄授權了嗎?





通過CM安裝好flume-ng之後,可以在管理界面上修改flume.conf配置,但是 /etc/flume-ng/conf目錄下的flume.conf文件卻空空如也。由於對CM的運行原理不瞭解,搞不明白我修改的配置信息保存到哪去了。於是我find / -name "flume.conf" -print了一下,發現我最新修改的flume.conf在/var/run/cloudera-scm-agent/process/455-flume-AGENT下面。

455-flume-AGENT這個目錄前面的那個455是會變的,每次重啓flume服務都會變,應該是CM內部管理的一個ID號,如果只是刷新配置,則還是這個ID號不會變。

繼續學習。



flume將log4j日誌數據寫入到hdfs

在第一篇文章中我們是將log4j的日誌輸出到了agent的日誌文件當中。配置文件如下:
  1. tier1.sources=source1  
  2. tier1.channels=channel1  
  3. tier1.sinks=sink1  
  4.   
  5. tier1.sources.source1.type=avro  
  6. tier1.sources.source1.bind=0.0.0.0  
  7. tier1.sources.source1.port=44444  
  8. tier1.sources.source1.channels=channel1  
  9.   
  10. tier1.channels.channel1.type=memory  
  11. tier1.channels.channel1.capacity=10000  
  12. tier1.channels.channel1.transactionCapacity=1000  
  13. tier1.channels.channel1.keep-alive=30  
  14.   
  15. tier1.sinks.sink1.type=logger  
  16. tier1.sinks.sink1.channel=channel1
複製代碼


本次我們把log4j的日誌直接採集輸出到hdfs中去。需要修改flume.conf中sink的配置:
  1. tier1.sources=source1  
  2. tier1.channels=channel1  
  3. tier1.sinks=sink1  
  4.   
  5. tier1.sources.source1.type=avro  
  6. tier1.sources.source1.bind=0.0.0.0  
  7. tier1.sources.source1.port=44444  
  8. tier1.sources.source1.channels=channel1  
  9.   
  10. tier1.channels.channel1.type=memory  
  11. tier1.channels.channel1.capacity=10000  
  12. tier1.channels.channel1.transactionCapacity=1000  
  13. tier1.channels.channel1.keep-alive=30  
  14.   
  15. tier1.sinks.sink1.type=hdfs  
  16. tier1.sinks.sink1.channel=channel1  
  17. tier1.sinks.sink1.hdfs.path=hdfs://master68:8020/flume/events  
  18. tier1.sinks.sink1.hdfs.fileType=DataStream  
  19. tier1.sinks.sink1.hdfs.writeFormat=Text  
  20. tier1.sinks.sink1.hdfs.rollInterval=0  
  21. tier1.sinks.sink1.hdfs.rollSize=10240  
  22. tier1.sinks.sink1.hdfs.rollCount=0  
  23. tier1.sinks.sink1.hdfs.idleTimeout=60  
複製代碼



簡單說明一下修改的部分,我們將sink的type由logger變爲hdfs,然後指定輸出path, 默認是輸出到HDFS後爲sequencefile,裏面的內容無法直接打開瀏覽,爲了便於直觀看到我們輸出的日誌信息,所以我這裏將fileType爲DataStream, writeFormat=Text,這樣就可以直接打開生成的文件進行查看了。
下面幾個roll開頭的參數都是用來控制滾動日誌輸出的,官方文檔上的說明也很詳細,我這裏配置的只按文件大小來滾動rollSize=10240,也就是10K滾動生成一個新的文件用來接收新的EVENTS。實際中這個Size應該更大一些,我覺得設置成HDFS的blocksize大小應該挺合適的。

idleTimeout設置爲60秒(默認值爲0),這裏面的原理是這樣的,flume裏面每生成一個接收文件時的命名規則如:FlumeData.1406251462179.tmp,.tmp表示這個文件正在被使用來接收EVENTS,當滿10K之後,這個文件會被rename成FlumeData.1406251462179,把.tmp後綴去掉,但是如果你停止了應用程序後,FlumeData.1406251462179.tmp還沒滿10K,按照默認的idleTimeout設置,不會將它rename,也就是.tmp後綴一直在,造成了這個文件一直在使用當中的一個假象,這是有問題的,我們設置idleTimeout=60,即60秒後這個文件還沒有被寫入數據,就會關閉它然後rename它去掉.tmp,以後新進來的events,會新開一個.tmp文件來接收。

我們再運行第一篇文章中的那個示例應用程序,然後去path指定的目錄下面就能看到log4j輸出的日誌信息了。


補充注意點(針對cm安裝的flume):

首先在hdfs上創建/flume目錄:hadoop fs -mkdir /flume
給該目錄授權給flume用戶和組:hadoop fs -chown -R flume:flume /flume

注意給目錄授權很重要,不然會報錯。
發佈了9 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章