Flume安裝操作使用

jopen 9年前發布 | 24K 次閱讀 Flume

1.    背景介紹

Flumecloudera20097月開源的日志系統。

Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力。

Flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。它的主要目標是把應用程序中的數據傳送到Hadoop的分布式文件系統(HDFS)。它基于數據流構建了一個簡單靈活的架構。它非常健壯,具有容錯性。它使用了一個簡單可擴展的數據模型,這種數據模型支持線上實時分析應用。

Flume主要用Java實現,而且已經通過類Unix操作系統的測試。

Flume有兩大版本,flume-og(flume original generation)flume-ng(flume next generation)。以下提到flume,均指flume-ng版。

2.    學習資料

官方網站:http://flume.apache.org/

源碼SVN下載地址:https://github.com/apache/flume

博客 http://blog.csdn.net/chinalgf/article/category/1333195

3. 下載安裝

1.1        下載

系統環境: RedHat Enterprise Linux 6.3

官方下載地址:http://flume.apache.org/download.html

 

1.2  安裝

Linux下安裝

1.在終端進入Flume安裝的目錄,如/usr/local/flume,下載安裝文件,解壓

cd /usr/local/flume

wget http://www.apache.org/dyn/closer.cgi/flume/1.4.0/apache-flume-1.4.0-bin.tar.gz

tar -xzvf apache-flume-1.4.0-bin.tar.gz

2.Flume需要jdk1.6+環境,在安裝flume之前先安裝好JDK的環境

3.配置環境變量

vi /etc/profile  或者 vi ~/.bash_profile

export FLUME_HOME=/usr/local/flume  

export FLUME_LOG_DIR=$FLUME_HOME/log

export FLUME_CONF_DIR=$FLUME_HOME/conf

export PATH=$JAVA_HOME/bin:$PATH:$FLUME_HOME/bin

使配置生效 source /etc/profile

修改flume配置

cd $FLUME_CONF_DIR

cp flume-conf.properties.template flume-conf.properties

cp flume-env.sh.template flume-env.sh

4、測試安裝是否成功

在終端里面輸入“flume-ng -h”,如果打印出幫助信息說明已經安裝成功。

4.    工作流程和原理

AgentFlume的基本單位。每個Agentsourcechannelsink三類組件構成,如下圖。其中source在這里的角色類似生產者,負責收集agent外部傳來的數據,這個數據可以是日志,也可以是上一級Agent通過網絡發送過來的消息。收集到數據后,source會將它們傳到一個或多個channel里,channel在這里起到緩沖的作用,在被sink消費前,消息停留在channel中。Sink就是消費者了,它負責從channel中取走消息,輸出到存儲介質(如HDFS)或下一跳Agent,等。更詳細的資料參考http://flume.apache.org/FlumeUserGuide.html

Flume系統由多個agent互聯組成,可以根據需求,建立各種agent的連接方式。

Flume內置了很多常用的組件,同時Flume也允許用戶開發自己的組件。

Flume處理的基本數據單位是一個event,它有bodyheaders兩部分組成,body中保存數據內容,headers中存儲一些額外的信息。

5.    操作實例

一、FlumeAvro聯合的實例

   把以下內容寫入配置文件“conf/flume.conf”

 

# Define a memory channel called ch1 on agent1

agent1.channels.ch1.type = memory

 

# Define an Avro source called avro-source1 on agent1 and tell it

# to bind to 0.0.0.0:41414. Connect it to channel ch1.

agent1.sources.avro-source1.channels = ch1

agent1.sources.avro-source1.type = avro

agent1.sources.avro-source1.bind = 0.0.0.0

agent1.sources.avro-source1.port = 41414

 

# Define a logger sink that simply logs all events it receives

# and connect it to the other end of the same channel.

agent1.sinks.log-sink1.channel = ch1

agent1.sinks.log-sink1.type = logger

 

# Finally, now that we've defined all of our components, tell

# agent1 which ones we want to activate.

agent1.channels = ch1

agent1.sources = avro-source1

agent1.sinks = log-sink1

 

在終端1輸入下面的命令,啟動Agent

bin/flume-ng agent --conf ./conf/ -f conf/flume.conf -Dflume.root.logger=DEBUG,console -n agent1


然后在另一個終端2里面啟動avro-client,

bin/flume-ng avro-client --conf conf -H localhost -p 41414 -F /etc/passwd -Dflume.root.logger=DEBUG,console

 

如果在終端1當中打印出下面的信息,那么實例成功

2014-03-31 13:56:26,354 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 72 6F 6F 74 3A 78 3A 30 3A 30 3A 72 6F 6F 74 3A root:x:0:0:root: }

2014-03-31 13:56:26,355 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 62 69 6E 3A 78 3A 31 3A 31 3A 62 69 6E 3A 2F 62 bin:x:1:1:bin:/b }

2014-03-31 13:56:26,355 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 64 61 65 6D 6F 6E 3A 78 3A 32 3A 32 3A 64 61 65 daemon:x:2:2:dae }

2014-03-31 13:56:26,355 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 61 64 6D 3A 78 3A 33 3A 34 3A 61 64 6D 3A 2F 76 adm:x:3:4:adm:/v }

2014-03-31 13:56:26,356 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 6C 70 3A 78 3A 34 3A 37 3A 6C 70 3A 2F 76 61 72 lp:x:4:7:lp:/var }

...

 

詳解:

本實例創建了一個內存通道——ch1、Avro RPC源——avro-source1和一個日志sink——log-sink1。任何從avro-source1發送到ch1的事件,都會被傳送到log-sink1。

Flume提供了各種各樣的sources、sinks和channels,不同的插件具有特定的可選的和必須的配置,具體信息參考:http://flume.apache.org/FlumeUserGuide.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!