Flume1 初識(shí)Flume和虛擬機(jī)搭建Flume環(huán)境
前言:
工作中需要同步日志到hdfs,以前是找運(yùn)維用rsync做同步,現(xiàn)在一般是用flume同步數(shù)據(jù)到hdfs。以前為了工作簡(jiǎn)單看個(gè)flume的一些東西,今天下午有時(shí)間自己利用虛擬機(jī)搭建了flume環(huán)境,并簡(jiǎn)單做了幾個(gè)練習(xí)。學(xué)習(xí)過(guò)程中還是比較順利的,現(xiàn)在將學(xué)習(xí)的過(guò)程記錄與此,供以后自己查閱,如果能幫助到其他人,自然是更好的。
===============================================================長(zhǎng)長(zhǎng)的分割線====================================================================
正文:
關(guān)于flume的理論介紹,網(wǎng)上可以搜到到很多的資料,大家可以自行搜索,我這里就不在重復(fù)贅述。
本文中主要涉及三塊內(nèi)容: 第一,fume概念簡(jiǎn)介;第二,搭建flume環(huán)境并運(yùn)行hello word;第三,在第二點(diǎn)的基礎(chǔ)上,再介紹一種“源”的使用方式。
第一步,flume簡(jiǎn)介(這部分資料參考了網(wǎng)上文章的資料):
(1). flume基本組件
a. Event:消息的基本單位,由headers和body組成
b. Agent:JVM進(jìn)程,負(fù)責(zé)將外部來(lái)源產(chǎn)生的消息轉(zhuǎn)發(fā)到外部的目的地
? Source:從外部來(lái)源讀入event,并寫入channel
? Channel:event暫存組件,source寫入后,event將會(huì)一直保存,直到被sink成功消費(fèi)。
? Sink:從channel讀入event,并寫入目的地
(2). flume數(shù)據(jù)流,對(duì)照下面的兩幅數(shù)據(jù)流圖片,需要我們記住如下概念:
a. 源將事件寫到一個(gè)或多個(gè)通道中
b. 通道作為事件從源到接收器傳遞的保留區(qū)
c. 接收器只從一個(gè)通道接收事件
d. 代理可能會(huì)有多個(gè)源、通道與接收器。


第二步,搭建flume環(huán)境并運(yùn)行hello world:
(1). 從flume官網(wǎng)上下載 http://flume.apache.org/download.html flume安裝包,可以下載源碼包自己編譯,但是我當(dāng)初直接下載了編譯好的apache-flume-1.5.2-bin.tar.gz。
(2). 將apache-flume-1.5.2-bin.tar.gz這個(gè)壓縮包通過(guò)tar -xzvf apache-flume-1.5.2-bin.tar.gz 命令解壓縮。為了便于后邊的講解說(shuō)一下我解壓縮后的目錄: /myself_settings/flume1.5.2/apache-flume-1.5.2-bin
(3). 直接進(jìn)入conf目錄,配置example0001.conf 配置文件,配置內(nèi)容如下: 我們定義了一個(gè)名叫agent1的Agent。其中包含了名為src1的源、名為channel1的通道以及名為sink1的接收器。
1 # example0001.conf: A single-node Flume Configuration 2 3 # Name the components on this agent 4 agent1.sources = src1 5 agent1.sinks = sink1 6 agent1.channels = channel1 7 8 # Describe/configure the source 9 agent1.sources.src1.type = netcat 10 agent1.sources.src1.bind = 127.0.0.1 11 agent1.sources.src1.port = 44444 12 13 #Describe the sink 14 agent1.sinks.sink1.type = logger 15 16 # Use a channel which buffers events in memory 17 agent1.channels.channel1.type = memory 18 agent1.channels.channel1.capacity = 1000 19 agent1.channels.channel1.transactionCapacity = 100 20 21 # Bind the source and sink to the channel 22 agent1.sources.src1.channels = channel1 23 agent1.sinks.sink1.channel = channel1
(4). 在安裝目錄的根目錄,比如我的目錄: /myself_settings/flume1.5.2/apache-flume-1.5.2-bin 執(zhí)行命令: ./bin/flume-ng agent -n agent1 -c conf -f conf/example0001.conf -Dflume.root.logger=INFO,console ,啟動(dòng)成功如下圖:

(5). 在啟動(dòng)成功后,我們執(zhí)行telnet命令: telnet localhost 44444,正確連接telnet后,依次輸入hello、hello world和hello flume,這時(shí)我們可以看到剛才啟動(dòng)agent的控制臺(tái)中就成功接收并輸出了你剛才輸入的內(nèi)容,詳細(xì)看上圖矩形框選中的部分。
第三步,exec源的使用。這個(gè)主要是如果我想實(shí)時(shí)的接收業(yè)務(wù)系統(tǒng)的日志,那么可以設(shè)置這種源。
(1). 直接進(jìn)入conf目錄,配置example0002.conf 配置文件,配置內(nèi)容如下: 我們定義了一個(gè)名叫agent2的Agent。其中包含了名為src2的源、名為channel2的通道以及名為sink2的接收器。
1 # example0001.conf: A single-node Flume Configuration 2 3 # Name the components on this agent 4 agent2.sources = src2 5 agent2.sinks = sink2 6 agent2.channels = channel2 7 8 # Describe/configure the source 9 agent2.sources.src2.type = exec 10 agent2.sources.src2.command = tail -F /test/test.log 11 12 #Describe the sink 13 agent2.sinks.sink2.type = logger 14 15 # Use a channel which buffers events in memory 16 agent2.channels.channel2.type = memory 17 agent2.channels.channel2.capacity = 1000 18 agent2.channels.channel2.transactionCapacity = 100 19 20 # Bind the source and sink to the channel 21 agent2.sources.src2.channels = channel2 22 agent2.sinks.sink2.channel = channel2
(2). 結(jié)合上面的配置文件,我們會(huì)發(fā)現(xiàn)和我們之前的定義的example1.conf的例子不同主要在與9、10行標(biāo)紅的定義源的類型和方式。結(jié)合命令來(lái)說(shuō),就是如果/test/test.log文件中內(nèi)容發(fā)生變化,那么就會(huì)把新增的數(shù)據(jù)傳入到當(dāng)前agent2中。
(3). 為了測(cè)試上邊的這個(gè)例子,在啟動(dòng)agent2之前,我們定義一個(gè)crontab任務(wù): */1 * * * * date >> /test/test.log ,每隔一分鐘往/test/test.log中插入一條當(dāng)前服務(wù)器的時(shí)間。
(4). 在上邊crontab任務(wù)執(zhí)行后,我們開始啟動(dòng)agent2: ./bin/flume-ng agent -n agent2 -c conf -f conf/example0002.conf -Dflume.root.logger=INFO,console。
(5). 隨著每隔一分鐘test.log中新增的一條時(shí)間記錄,agent2的控制臺(tái)也會(huì)相應(yīng)的接收并輸出一條記錄,如下圖:


綜上所述,我們一起完成了對(duì)flume的初步認(rèn)識(shí),我個(gè)人任務(wù)如果你是開發(fā),這些基本的了解對(duì)你來(lái)說(shuō)是必要的,當(dāng)然如果從這篇文章中看,貌似flume比較簡(jiǎn)單,但是我個(gè)人覺得單看flume確實(shí)沒有太多可說(shuō)的,但是我們?nèi)绻裬afka、flume、storm等實(shí)時(shí)計(jì)算工具融合起來(lái)的話,還是要好好研究研究的。
浙公網(wǎng)安備 33010602011771號(hào)