1. 程式人生 > >Flume-ng 多節點叢集搭建

Flume-ng 多節點叢集搭建

Flume NG是一個分散式、可靠、可用的系統,它能夠將不同資料來源的海量日誌資料進行高效收集、聚合,最後儲存到一箇中心化資料儲存系統中,方便進行資料分析。事實上flume也可以收集其他資訊,不僅限於日誌。由原來的Flume OG到現在的Flume NG,進行了架構重構,並且現在NG版本完全不相容原來的OG版本。相比較而言,flume NG更簡單更易於管理操作。
Flume OG:Flume original generation 即Flume 0.9.x版本
Flume NG:Flume next generation ,即Flume 1.x版本。
Flume NG使用者參考手冊:http://flume.apache.org/FlumeUserGuide.html#


Flume1.5.2下載地址:
http://www.apache.org/dyn/closer.cgi/flume/1.5.2/apache-flume-1.5.2-bin.tar.gz
簡單比較一下兩者的區別:
OG有三個元件agent、collector、master,agent主要負責收集各個日誌伺服器上的日誌,將日誌聚合到collector,可設定多個collector,master主要負責管理agent和collector,最後由collector把收集的日誌寫的HDFS中,當然也可以寫到本地、給storm、給Hbase。
這裡寫圖片描述
NG最大的改動就是不再有分工角色設定,所有的都是agent,可以彼此之間相連,多個agent連到一個agent,此agent也就相當於collector了,NG也支援負載均衡,具體參見
http://shiyanjun.cn/archives/915.html

這裡寫圖片描述
現在我們準備了三臺機器(虛擬機器也可以,但出現的問題也會很多,比如記憶體空間不足,網路連線問題,此處已哭暈)。
作業系統:CentOS 6.6
Flume版本:1.5.2
設定三臺機器的IP地址分別為192.168.1.105,192.168.1.106,192.168.1.107,記得關閉防火牆:
命令service iptables stop
環境準備好之後,在flume/conf/下新建agent.conf檔案,105和106配置一樣,如下:

#Agent
flumeAgent.channels = c1
flumeAgent.sources
= s1 flumeAgent.sinks = k1 #flumeAgent Spooling Directory Source #注(1) flumeAgent.sources.s1.type = spooldir flumeAgent.sources.s1.spoolDir =/usr/logs/ flumeAgent.sources.s1.fileHeader = true flumeAgent.sources.s1.deletePolicy =immediate flumeAgent.sources.s1.batchSize =1000 flumeAgent.sources.s1.channels =c1 flumeAgent.sources.s1.deserializer.maxLineLength =1048576 #flumeAgent FileChannel #注(2) flumeAgent.channels.c1.type = file flumeAgent.channels.c1.checkpointDir = /var/flume/spool/checkpoint flumeAgent.channels.c1.dataDirs = /var/flume/spool/data flumeAgent.channels.c1.capacity = 200000000 flumeAgent.channels.c1.keep-alive = 30 flumeAgent.channels.c1.write-timeout = 30 flumeAgent.channels.c1.checkpoint-timeout=600 # flumeAgent Sinks #注(3) flumeAgent.sinks.k1.channel = c1 flumeAgent.sinks.k1.type = avro # connect to CollectorMainAgent flumeAgent.sinks.k1.hostname = 192.168.1.107 flumeAgent.sinks.k1.port = 44444

我們設定107機器為匯聚節點,105和106的日誌檔案都將集中到這裡,在flume/conf/下新建consolidatio.conf檔案,配置如下:

#flumeConsolidationAgent
flumeConsolidationAgent.channels = c1
flumeConsolidationAgent.sources  = s1
flumeConsolidationAgent.sinks    = k1 

#flumeConsolidationAgent Avro Source
#注(4)
flumeConsolidationAgent.sources.s1.type = avro
flumeConsolidationAgent.sources.s1.channels = c1
flumeConsolidationAgent.sources.s1.bind = 192.168.1.107
flumeConsolidationAgent.sources.s1.port = 44444

#flumeConsolidationAgent FileChannel
flumeConsolidationAgent.channels.c1.type = file
flumeConsolidationAgent.channels.c1.checkpointDir = /var/flume/spool/checkpoint
flumeConsolidationAgent.channels.c1.dataDirs = /var/flume/spool/data
flumeConsolidationAgent.channels.c1.capacity = 200000000
flumeConsolidationAgent.channels.c1.keep-alive = 30
flumeConsolidationAgent.channels.c1.write-timeout = 30
flumeConsolidationAgent.channels.c1.checkpoint-timeout=600

##flumeConsolidationAgent Memory Channel
#flumeConsolidationAgent.channels.c1.type = memory
#flumeConsolidationAgent.channels.c1.capacity = 10000
#flumeConsolidationAgent.channels.c1.transactionCapacity = 10000
#flumeConsolidationAgent.channels.c1.byteCapacityBufferPercentage = 20
#flumeConsolidationAgent.channels.c1.byteCapacity = 800000

#flumeConsolidationAgent Sinks
#注(5)
flumeConsolidationAgent.sinks.k1.channel= c1
flumeConsolidationAgent.sinks.k1.type = file_roll
flumeConsolidationAgent.sinks.k1.sink.directory = /var/tmp
flumeConsolidationAgent.sinks.k1.sink.rollInterval = 3600
flumeConsolidationAgent.sinks.k1.batchSize = 10000

配置完成後,先啟動107,命令列:

bin/flume-ng agent --conf conf --conf-file conf/consolidatio.conf --name flumeConsolidationAgent -Dflume.root.logger=DEBUG,console

再啟動105和106,命令列:

bin/flume-ng agent --conf conf --conf-file conf/agent.conf --name flumeAgent -Dflume.root.logger=DEBUG,console

此處有三種模式執行:INFO、DEBUG、ERROR,以次容錯度升高。
注(1):sources型別為spooldir,監控某一目錄下的檔案,一旦有檔案進入,則收割。被收割的檔案不能再開啟編輯,此處設定收割完畢後直接刪除檔案,這兒我出現的一個問題是,直接手動往該目錄下拷貝檔案一旦檔案大小高於20M左右就宕機,提前拷入則正常,後來查到原因是拷貝的的速度遠遠小於收割的速度,有種檔案被操作的感覺,所以出錯。
注(2):channel型別為file。
MemoryChannel: 所有的events被儲存在記憶體中。優點是高吞吐。缺點是容量有限並且Agent死掉時會丟失記憶體中的資料。
FileChannel: 所有的events被儲存在檔案中。優點是容量較大且死掉時資料可恢復。缺點是速度較慢。
注(3):sink型別為avro,hostname都要指向的consolidation的IP,埠號可以任意設定,只要不衝突就行,這樣也會出現問題,當107的flumeConsolidationAgent重新啟動後會出現“地址已被佔用的”錯誤,要麼修改埠號,要麼殺死該程序。
注(4):consolidation要繫結本機的IP,埠號也要與105和106一致。
注(5):此處我們將收集的檔案存入本地,並沒有寫入HDFS,因為還要裝Hadoop。這裡要千萬注意所有sinks的channel,比如x.sinks.k1.channel = c1中的channel一定不加s。
成功後,我們將看到如下資訊:
這裡寫圖片描述

歡迎批評指正!