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。
成功後,我們將看到如下信息:
這裏寫圖片描述

但是單獨使用flume意義不大,需要結合其他工具一起組成大數據架構。
大數據架構:flume-ng+Kafka+Storm+HDFS 實時系統組合:
http://www.aboutyun.com/thread-6855-1-1.html(出處: about雲開發)
Flume+Kafka+Strom基於分佈式環境的結合使用:
http://www.aboutyun.com/thread-8915-1-1.html(出處: about雲開發)

歡迎批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章