apache-flume-1.7.x配置安裝_營運

來源:互聯網
上載者:User

http://blog.csdn.net/alphags/article/details/52862578?locationNum=10&fps=1


本文內容主要參考自Apache Flume使用者文檔(http://flume.apache.org/FlumeUserGuide.html),由於關於Apache Flume 1.X的中文參考資料不是很多,所以這裡將我部署的過程記錄下來,希望能給有同樣需要的人們有一些提示作用。 
(英文文檔的內容很多,這裡唯寫一些我自己用到的) Overview

Apache Flume 是一個高效的分布式日誌收集系統,可以將大量的日誌資料從不同的資料來源集中到一起。(PS:知道這些就夠了) System Requirments

1、JDK 1.7+ 
2、充足的記憶體 
3、磁碟還有可用空間 
4、對有相應目錄的讀寫權限 資料流模型

 
從圖上可以看到,每一個Agent 包含一個Source 一個channel 一個sink 
source 可以理解為資料來源(記錄檔、AVRO、… 有很多 看文檔就能知道,我只用到了檔案) 
sink 可以理解為資料目的地(同樣也有很多,我測試環境也是直接寫到檔案) 
channel 可以理解為資料流管道(種類也有不少,文檔中給的例子是用的記憶體,但是記憶體是不穩定的,所以我的測試環境也換成了檔案) 
簡單表述三者作用(不嚴謹表述):source 讀取日誌資料將其寫入channel中,sink從channel中讀取資料然後寫到其指定的地方。這裡如果sink寫失敗,那麼資料就會一直在channel中堆積直到sink恢複正常(這樣就確保了日誌資料不會丟失) 
多個 Apache Flume Agent 還可以串連在一起,模型如下圖所示 

知道了以上內容就可以開始搭建測試環境了 硬體環境

三台伺服器IP地址分別為192.168.0.101~103,全部使用linux ubuntu 12.04 server 作業系統 系統結構

安裝過程

  wget  http://mirrors.cnnic.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz  #下載壓縮包  tar -xvzf apache-flume*.tar.gz  #解壓  mv  apache-flume /data/local/flume #本人比較喜歡把把軟體安裝在/data/local目錄下   
1 2 3 配置

這裡我直接把我本地的配置發上來

# flume.conf: A Flume configuration# Agent a1a1.sources = r1a1.sinks = k1a1.channels = c1# source 配置a1.sources.r1.type = execa1.sources.r1.command = tail -F /data/logs/system.log# sink 配置a1.sinks.k1.type=avroa1.sinks.k1.hostname=192.168.0.101a1.sinks.k1.port=4545# channel 配置a1.channels.c1.type = filea1.channels.c1.checkpointDir=/data/logs/channels/a1/checkpointa1.channels.c1.dataDirs = /data/logs/channels/a1/data# 綁定source、single到channel上a1.sources.r1.channels = c1a1.sinks.k1.channel = c1#ageng a2a2.sources=r2a2.sinks=k2a2.channels=c2#a2 source 配置a2.sources.r2.type=avroa2.sources.r2.bind=192.168.0.101a2.sources.r2.port=4545#a2 sink 配置 將合并後的日誌資料寫到/data/local/collector目錄下a2.sinks.k2.type = file_rolla2.sinks.k2.sink.directory = /data/local/collectora2.sinks.k2.sink.rollInterval=3600##下面是注釋掉的代碼為配置sink ,日誌按天合并後儲存到單獨的檔案夾中#a2.sinks.k2.type=hdfs#a2.sinks.k2.hdfs.path=hdfs://hadoop-master:9000/events/%y-%m-%d#a2.sinks.k2.hdfs.filePrefix=events-#a2.sinks.k2.hdfs.rollInterval=0#a2.sinks.k2.hdfs.rollSize=0#a2.sinks.k2.hdfs.rollCount=0#a2.sinks.k2.hdfs.useLocalTimeStamp=true#a2 channel配置a2.channels.c2.type = filea2.channels.c2.checkpointDir=/data/logs/channels/a4/checkpointa2.channels.c2.dataDirs = /data/logs/channels/a4/data# 綁定source、single到channel上a2.sources.r2.channels=c4a2.sinks.k2.channel=c4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

說明: 運行

在192.168.0.101上使用下面命令啟動Agent2(a2)

bin/flume-ng agent --conf conf --conf-file ./conf/flume.conf --name a2 -Dflume.root.logger=INFO,console
1

在192.168.0.101另啟動一個終端,運行下面命令啟動Agent1(a1)

bin/flume-ng agent --conf conf --conf-file ./conf/flume.conf --name a1 -Dflume.root.logger=INFO,console
1

分別在192.168.0.102~103上同樣啟動Agent1(a1)

bin/flume-ng agent --conf conf --conf-file ./conf/flume.conf --name a1 -Dflume.root.logger=INFO,console
1 產生測試資料的python小程式
#!/usr/bin/pythonimport osimport randomfrom time import ctime,sleepfor i in range(1,1000000):        smil=random.randint(50,100)        print smil/1000.0        com="echo \"hello message from 202\t"+str(i)+"\">> /data/logs/system.log";        print com        os.system(com)        sleep(smil/1000.0)
1 2 3 4 5 6 7 8 9 10 11 測試結果

可以看到在目錄/data/logs/collector 目錄下產生了多個合并後的記錄檔 PS:

建議大家閱讀Flume的文檔,雖然英文讀起來比較累但是大家搞技術的誰不懂點英文呢,所以下點功夫還是能看懂的。 
如果通過本文仍不能理解Flume的工作流程,建議大家學習文檔中給出的 A simple example 。(下面作個簡單解釋)

# example.conf: A single-node Flume configuration# Name the components on this agenta1.sources = r1a1.sinks = k1a1.channels = c1# Describe/configure the sourcea1.sources.r1.type = netcata1.sources.r1.bind = localhosta1.sources.r1.port = 44444# Describe the sinka1.sinks.k1.type = logger# Use a channel which buffers events in memorya1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100# Bind the source and sink to the channela1.sources.r1.channels = c1a1.sinks.k1.channel = c1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

原文:This configuration defines a single agent named a1. a1 has a source that listens for data on port 44444, a channel that buffers event data in memory, and a sink that logs event data to the console. 
譯:這個配置定義了一個名稱為a1的agent。a1有一個source 監聽連接埠44444 (接收44444連接埠的任何收到的資料),一個記憶體管道(channel)將所有接收到的資料都暫存在記憶體當中,一個sink 將收到的資料列印到控台。

 $ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
1

執行上述命令後在另外一個命令視窗執行(沒有telnet。 apt-get install telnet 或者yum install telnet 安裝 )

$ telnet localhost 44444Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.Hello world! <ENTER>OK
1 2 3 4 5 6

我們可以看到Flume 的控台列印出

12/06/19 15:32:19 INFO source.NetcatSource: Source starting12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D          Hello world!. }
1 2 3 著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.