標籤:
首先介紹一下Flume是個神馬東東。Flume可以實現從多種資料來源擷取資料,然後傳遞到不同的目標路徑。通常是利用Flume傳送logs到不同的地方,例如從web server收集logs檔案然後傳送到hadoop cluster進行分析之類的。Flume配置靈活簡單,可以實現不同情況的記錄傳送,確實是一款不錯的工具。
OK,接下來先看看怎麼安裝配置Flume。大家可以從http://flume.apache.org擷取Flume的最新二進位版本。下載好後,解壓,然後將flume的bin目錄加到PATH中(這裡預設系統已經安裝好了java,並且已經將java的bin目錄添加到PATH中)。最後進入flume目錄中找到conf目錄,將裡面的flume-env.sh.template複製成flume-env.sh,然後往裡面添加JAVA_HOME即可。至此就安裝好了。
下面先解釋一下Flume裡面的幾個重要角色,然後我們配置幾個agent玩玩。
Flume裡面有四個重要的角色,分別是source,channel,sink,event。Source負責收集資料並建立一個event,然後將event傳遞到指定的channel,接著event通過channel到達sink,sink負責將event的輸出傳遞到指定的目標位置。簡而言之,就是source→channel→sink→destination,其中傳送的是event。
OK,先來看看一個簡單agent。這個agent我們用來接收網路資料並寫到flume的日誌中。配置代碼如下:
agent1.sources = netsource//指定source類型為netsourceagent1.sinks = logsink//指定sink類型為logsinkagent1.channels = memorychannel//指定channel類型為memorychannel,就是將資料讀到記憶體中,然後傳送agent1.sources.netsource.type = netcat //netsource類型為netcatagent1.sources.netsource.bind = localhost//綁定本機agent1.sources.netsource.port = 3000//監聽連接埠為原生3000agent1.sinks.logsink.type = logger//logsink的類型為loggeragent1.channels.memorychannel.type = memory //指定類型是memoryagent1.channels.memorychannel.capacity = 1000//指定資料緩衝大小agent1.channels.memorychannel.transactionCapacity = 100agent1.sources.netsource.channels = memorychannel//指定source傳送的channelagent1.sinks.logsink.channel = memorychannel//指定sink的接收channel
將上面代碼命名為agent1.conf並保持在flume的工作目錄即可(我比較懶,沒有建立,就直接使用下載後解壓的flume目錄了)。
接下來啟動這個agent!在終端中輸入:flume-ng agent --conf conf --conf-file agent1.conf --name agent1 (--conf 指定conf目錄,--conf-file指定設定檔名,--name指定agent名字)。
然後開啟另一個終端視窗,使用curl工具從本地的3000連接埠輸入一些資料,在到flume的記錄檔中查看。即可看到資料已經已日誌的格式儲存到記錄檔中。
到這裡,我們已經完成了一個簡單的抓取資料的過程。可是我們發現要進入目錄讀取比較麻煩,那我們乾脆將資料寫出到console吧。
只需要在啟動命令後面加上參數-Dflume.root.logger=INFO,console即可。
好了,我們來看看結果。可以看到,我們每次輸入,內容都會在另一個終端同步顯示。
OK,這次就到這裡。下一次再實現其他的agent!!謝謝大家的閱讀。本人水平有限,如有紕漏,請不吝指正!不勝感激!
Data Collection with Apache Flume(一)