Hadoop入門進階課程12--Flume介紹、安裝與應用案例

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,博主爲石山園,博客地址爲 http://www.cnblogs.com/shishanyuan  。該系列課程是應邀實驗樓整理編寫的,這裏須要贊一下實驗樓提供了學習的新方式,能夠邊看博客邊上機實驗,課程地址爲 https://www.shiyanlou.com/courses/237html

【注】該系列所使用到安裝包、測試數據和代碼都可在百度網盤下載,具體地址爲 http://pan.baidu.com/s/10PnDs,下載該PDF文件node

1搭建環境

部署節點操做系統爲CentOS,防火牆和SElinux禁用,建立了一個shiyanlou用戶並在系統根目錄下建立/app目錄,用於存放Hadoop等組件運行包。由於該目錄用於安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(通常作法是root用戶在根目錄下建立/app目錄,並修改該目錄擁有者爲shiyanlou(chown R shiyanlou:shiyanlou /app)。linux

Hadoop搭建環境:apache

l  虛擬機操做系統: CentOS6.6  64位,單核,1G內存架構

l  JDK1.7.0_55 64app

l  Hadoop1.1.2分佈式

2Flume介紹

FlumeCloudera提供的日誌收集系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。 Flume是一個分佈式、可靠和高可用的海量日誌採集、聚合和傳輸的系統。ide

Flume具備ReliabilityScalabilityManageabilityExtensibility特色:oop

1.ReliabilityFlume提供3中數據可靠性選項,包括End-to-endStore on failureBest effort。其中End-to-end使用了磁盤日誌和接受端Ack的方式,保證Flume接受到的數據會最終到達目的。Store on failure在目的不可用的時候,數據會保持在本地硬盤。和End-to-end不一樣的是,若是是進程出現問題,Store on failure可能會丟失部分數據。Best effort不作任何QoS保證。學習

2.ScalabilityFlume3大組件:collectormasterstorage tier都是可伸縮的。須要注意的是,Flume中對事件的處理不須要帶狀態,它的Scalability能夠很容易實現。

3.ManageabilityFlume利用ZooKeepergossip,保證配置數據的一致性、高可用。同時,多Master,保證Master能夠管理大量的節點。

4.Extensibility:基於Java,用戶能夠爲Flume添加各類新的功能,如經過繼承Source,用戶能夠實現本身的數據接入方式,實現Sink的子類,用戶能夠將數據寫往特定目標,同時,經過SinkDecorator,用戶能夠對數據進行必定的預處理。

2.1 Flume架構

clip_image001 

 

上圖的Flume的架構中最重要的抽象是data flow(數據流),data flow描述了數據從產生,傳輸、處理並最終寫入目標的一條路徑(在上圖中,實線描述了data flow)。 Agent用於採集數據,agentflume中產生數據流的地方,同時,agent會將產生的數據流傳輸到collector。對應的,collector用於對數據進行聚合,每每會產生一個更大的流。

Flume提供了從console(控制檯)、RPCThrift-RPC)、text(文件)、tailUNIX tail)、syslogsyslog日誌系統,支持TCPUDP2種模式),exec(命令執行)等數據源上收集數據的能力。同時,Flume的數據接受方,能夠是console(控制檯)、text(文件)、dfsHDFS文件)、RPCThrift-RPC)和syslogTCPTCP syslog日誌系統)等。

其中,收集數據有2種主要工做模式,以下:

1. Push Sources:外部系統會主動地將數據推送到Flume中,如RPCsyslog

2. Polling SourcesFlume到外部系統中獲取數據,通常使用輪詢的方式,如textexec

注意,在Flume中,agentcollector對應,而sourcesink對應。Sourcesink強調發送、接受方的特性(如數據格式、編碼等),而agentcollector關注功能。

2.2 Flume管理方式

Flume Master用於管理數據流的配置,以下圖。

clip_image002 

爲了保證可擴展性,Flume採用了多Master的方式。爲了保證配置數據的一致性,Flume引入了ZooKeeper,用於保存配置數據,ZooKeeper自己可保證配置數據的一致性和高可用,另外,在配置數據發生變化時,ZooKeeper能夠通知Flume Master節點。

Flume Master間使用gossip協議同步數據。

3安裝部署Flume

3.1  Flume部署過程

3.1.1 下載Flume

能夠到apache基金flume官網http://flume.apache.org/download.html,選擇鏡像下載地址http://mirrors.hust.edu.cn/apache/flume/下載一個穩定版本,以下圖所示下載flume-1.5.2-bin.tar.gz

clip_image004

也能夠在/home/shiyanlou/install-pack目錄中找到該安裝包,解壓該安裝包並把該安裝包複製到/app目錄中

cd /home/shiyanlou/install-pack

tar -xzf flume-1.5.2-bin.tar.gz

mv apache-flume-1.5.2-bin /app/flume-1.5.2

clip_image006

3.1.2 設置/etc/profile參數

編輯/etc/profile文件,聲明flumehome路徑和在path加入bin的路徑:

export FLUME_HOME=/app/flume-1.5.2

export FLUME_CONF_DIR=$FLUME_HOME/conf

export PATH=$PATH:$FLUME_HOME/bin

clip_image008

編譯配置文件/etc/profile,並確認生效

source /etc/profile

echo $PATH

3.1.3 設置flume-env.sh配置文件

$FLUME_HOME/conf 下複製更名flume-env.sh.templateflume-env.sh,修改conf/flume-env.sh配置文件

cd /app/flume-1.5.2/conf

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

sudo vi flume-env.sh

修改配置文件內容 :

JAVA_HOME=/app/lib/jdk1.7.0_55

JAVA_OPTS="-Xms100m -Xmx200m -Dcom.sun.management.jmxremote"

clip_image010

3.2 部署驗證

3.2.1 驗證安裝

1. 修改flume-conf配置文件

$FLUME_HOME/conf目錄下修改flume-conf.properties.template文件,複製並更名爲flume-conf

cd /app/flume-1.5.2/conf

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

sudo vi flume-conf.properties

修改flume-conf配置文件內容

# The configuration file needs to define the sources, the channels and the sinks.

# Sources, channels and sinks are defined per agent, in this case called 'a1'

a1.sources = r1

a1.sinks = k1

a1.channels = c1

 

# For each one of the sources, the type is defined

a1.sources.r1.type = netcat

a1.sources.r1.bind = localhost

a1.sources.r1.port = 44444

 

#The channel can be defined as follows.

a1.sources.r1.channels = c1

# Each sink's type must be defined

a1.sinks.k1.type = logger

 

#Specify the channel the sink should use

a1.sinks.k1.channel = c1

 

# Each channel's type is defined.

a1.channels.c1.type = memory

# Other config values specific to each type of channel(sink or source)

# can be defined as well

# In this case, it specifies the capacity of the memory channel

a1.channels.c1.capacity = 1000

a1.channels.c1.transactionCapacity = 100

clip_image012

2. flume的安裝目錄/flume-1.5.2下運行

cd /app/flume-1.5.2

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

clip_image014

3. 再打開一個終端,輸入以下命令:

telnet localhost 44444

hello world

clip_image016

:在CentOS6.5運行telnet提示"command not found",使用sudo yum install telnet進行安裝

4. 在原來的終端上查看,能夠收到來自於telnet發出的消息

clip_image018

3.2.2 測試收集日誌到HDFS

1. $FLUME_HOME/conf目錄下修改flume-conf.properties.template文件,複製並更名爲flume-conf2.properties

cd /app/flume-1.5.2/conf

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

sudo vi flume-conf2.properties

clip_image020

a1.sources = r1

a1.sinks = k1

a1.channels = c1

a1.sources.r1.type = exec

a1.sources.r1.channels = c1

a1.sources.r1.command = tail -F /app/hadoop-1.1.2/logs/hadoop-shiyanlou-namenode-b393a04554e1.log

a1.sinks.k1.type = hdfs

a1.sinks.k1.channel = c1

a1.sinks.k1.hdfs.path = hdfs://hadoop:9000/class12/out_flume

a1.sinks.k1.hdfs.filePrefix = events-

a1.sinks.k1.hdfs.round = true

a1.sinks.k1.hdfs.roundValue = 10

a1.sinks.k1.hdfs.roundUnit = minute

a1.sinks.k1.hdfs.rollSize = 4000000

a1.sinks.k1.hdfs.rollCount = 0

a1.sinks.k1.hdfs.writeFormat = Text

a1.sinks.k1.hdfs.fileType = DataStream

a1.sinks.k1.hdfs.batchSize = 10

a1.channels.c1.type = memory

a1.channels.c1.capacity = 1000

a1.channels.c1.transactionCapacity = 100

clip_image022

2.  flume的安裝目錄/flume-1.5.2下運行

cd /app/flume-1.5.2

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

clip_image024

3. 不斷收集hadoop-hadoop-namenode-hadoop1.log的數據寫入HDFS

clip_image026

4. 查看hdfs/class12/out_flume中的文件

hadoop fs -ls /class12/out_flume

hadoop fs -cat /class12/out_flume/events-.1433921305493

clip_image028

相關文章
相關標籤/搜索