【分散式計算】分散式日誌匯入工具-Flume

李博Garvin發表於2015-08-04

背景

Flume是Apache贊助的一個分散式日誌管理系統,主要功能就是把叢集中每個worker產生的日誌log,collect到特定的地點。

為什麼要寫這篇文章呢,因為現在搜尋出來的文獻大多是老版本的flume,在flume1.X版本後,也就是flume-ng版本跟之前出現了很大的改動,市面上的很多文件都已經過時了,大家看的時候一定要注意這點,稍後我會提供幾個比較新的,有參考價值的文章。

flume的優勢有一下幾個方面:
* JAVA實現,跨平臺效能好
* 有一定的容錯機制,和防止資料保障的機制
* 提供了很多的agent
* 方便開發,有developer選項

功能

這裡寫圖片描述
單機版是如上形式的,有三個部件組成,分別是source,channel,sink。在使用的時候,只要安裝flume,然後配置好對應的conf檔案,就可以了。
source:主要是配置日誌檔案的來源(提供多種agent,支援多種資料來源)
channel:類似於一個佇列,暫存收到的日誌資料
sink:將日誌檔案輸出(有很多方式,可以投影到螢幕上,也可以讀到資料庫或者指定的檔案中)

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = avro          #avro是flume的一種type,讀取本地log檔案
a1.sources.r1.bind = localhost    #這個和下面的port對應於avro-client的埠
a1.sources.r1.port = 44444


# Describe the sink 
a1.sinks.k1.type = com.waqu.sink.OdpsSink #對應程式碼裡的包名
a1.sinks.k1.sink.batchSize = 20             #需要大於10
a1.sinks.k1.sink.table = *******            #自己建的hub表以及key-id資訊
a1.sinks.k1.sink.project =******* 
a1.sinks.k1.sink.odps.access_id =********** 
a1.sinks.k1.sink.odps.access_key =********** 
a1.sinks.k1.sink.odps.end_point =***********
a1.sinks.k1.sink.sink.tunnel.end_point =*******

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.checkpointDir=1000
a1.channels.c1.dataDirs = 100


# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

下面就針對這三點,詳細介紹下

Flume workflow

agent支援多種輸入的source,幾個比較常用的type。
*HTTP,可以監聽http埠,拿log
*netcat,可以監聽類似於telnet的埠資料
*Spooling ,監聽某個檔案目錄下新增的檔案
*Avro Source,傳送指定檔案,這個不支援實時監控,也就是說比方說我們監控a.log檔案,當a.log改變了,我們無法拿到改變的日誌
*Exec Source,這個可以實時監控某個檔案

重點說下Exec Source,這個功能非常酷,它允許在agent上執行shell命令,這樣我們就能用tail命令來監控某個檔案新增的內容。

tail -f log.txt

Develop

*首先是利用官方的sdk包,開發打包jar檔案
*把jar放到flume的lib檔案目錄下
*配置conf檔案
*啟動agent:flume-ng agent --conf conf --conf-file ./conf/my.conf -name a1 -Dflume.root.logger=INFO,console
*啟動資料來源:flume-ng avro-client -H localhost -p 44444 -F /home/garvin/log.txt -Dflume.root.logger=INFO,console

推薦幾篇有用的東西:
一個程式碼實現的例子:https://github.com/waqulianjie/odps_sink
開發者document:http://flume.apache.org/FlumeUserGuide.html
一個比較完整的介紹:http://www.aboutyun.com/thread-8917-1-1.html

本文來自部落格 “李博Garvin“
轉載請標明出處:http://blog.csdn.net/buptgshengod]

相關文章