hadoop之旅10-centerOS7 : Flume環境搭建

爾以發表於2018-11-13

Flume介紹

Apache Flume 是一個分散式,可靠且可用的系統,用於有效地從許多不同的源收集、聚合和移動大量日誌資料到一個集中式的資料儲存區。 Flume 的使用不只限於日誌資料。因為資料來源可以定製,flume 可以被用來傳輸大量事件資料,這些資料不僅僅包括網路通訊資料、社交媒體產生的資料、電子郵件資訊等

最常見的作用是Flume 可用於移動大規模批量流資料到HDFS系統。從Web伺服器收集當前日誌檔案資料到HDFS聚集用於分析。

Flume 支援多種來源,如:

  1. tail (從本地檔案,該檔案的管道資料和通過Flume寫入 HDFS,類似於Unix命令“tail”)
  2. 系統日誌
  3. Apache log4j (允許Java應用程式通過Flume事件寫入到HDFS檔案)。

Flume代理是JVM程式,裡面有3個組成部分 : Flume Source, Flume ChannelFlume Sink -通過該事件傳播發起在外部源之後

hadoop之旅10-centerOS7 : Flume環境搭建
整體流程:

監聽web服務端日誌資訊->傳送事件到sources端來消費->快取資料到channel中->sink從channel中取資料進行消費並儲存到hdfs中

Source

消費由外部源(如Web伺服器)傳遞給它的事件。外部源以一定的格式傳送資料給 Flume

channel

可以理解為快取區,用來儲存從 Source 那拿到的資料,直到 Flume slink 將資料消費

sink

從 channel 消費完資料就會將資料從 channel 中清除,隨後將資料放到外部儲存系統例如 HDFS (使用 Flume HDFS sink)或傳送到其他 Flume agent 的 source 中。不管是 Source 還是 Slink 都是非同步傳送和消費資料。

對Flume做了簡單介紹之後,帶大家一起搭建一下Flume環境,Flume搭建很簡單。

解壓軟體

解壓下載好的flume軟體

[root@master mmcc]# tar -zxvf apache-flume-1.8.0-bin.tar.gz 
複製程式碼

配置conf目錄檔案

  1. flume-env.sh.template複製一份,並改名為flume-env.sh
[root@master conf]# cp flume-env.sh.template flume-env.sh
複製程式碼
  1. 配置java環境 (可選)
vi flume-env.sh

JAVA_HOME=/app/lib/jdk1.7.0_55  #jdk的目錄
JAVA_OPTS="-Xms100m -Xmx200m -Dcom.sun.management.jmxremote"
複製程式碼

此時我們就已經可以直接使用了。做一個簡單的例子,監聽\home\mmcc\testlogs目錄下檔案的內容變化,並將其儲存到hdfs上的testlogs目錄,關於hdfs相關內容可參考hadoop之旅2-centerOS7: 搭建分散式hadoop環境

編寫conf檔案

[root@master conf]# vi flume-conf

agent.sources = r1  #設定名稱
agent.channels = c1  
agent.sinks = k1    

agent.sources.r1.type = spooldir  #用於抽取目錄下檔案
agent.sources.r1.spoolDir = /home/mmcc/testlogs  #監聽的目錄

agent.channels.c1.type=memory    #h緩衝區型別為記憶體
agent.channels.c1.capacity=1000
agent.channels.c1.transactionCapacity = 100

agent.sinks.k1.type = hdfs    #處理的型別,存入hdfs
agent.sinks.k1.hdfs.path=hdfs://master:9000/testlogs
agent.sinks.k1.hdfs.filePrefix = testlog_
agent.sinks.k1.hdfs.fileType = DataStream

agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1
複製程式碼

執行flume

[root@master flume-1.8.0]# ./bin/flume-ng agent --conf ./conf/ --conf-file ./conf/flume-conf --name agent -Dflume.root.logger=INFO,console
複製程式碼
  1. 最前面是通過bin下的flume-ng這個指令碼進行啟動;
  2. 下面就是啟動時候需要的一系列引數,-–conf表示是配置 conf檔案,conf-file 表示配置檔案的位置,可以是相對位置也可以是絕對位置,–name 就是之前配置檔案內的”agent.channels = c1”,猜測是flume伺服器配置的名稱, -Dflume.root.logger 表示輸出形式,console是命令視窗輸出,logging是log/flume.log檔案輸出。

執行成功後,flume就會為我們一直監聽我們配置的/home/mmcc/testlogs目錄

測試

/home/mmcc/testlogs目錄下

vi testlog1   #編輯任意內容
hhhh
klsjdlkfjlds
lsdkjflks
kldjfljsljcvxl
lkjvlh
複製程式碼

儲存退出 :wq

在hdfs上可以看到,生成了對應的檔案

hadoop之旅10-centerOS7 : Flume環境搭建

同時testlog1也會被flume標誌為已經掃描過的狀態 COMPLETED

hadoop之旅10-centerOS7 : Flume環境搭建

相關文章