Flume介紹
Apache Flume 是一個分散式,可靠且可用的系統,用於有效地從許多不同的源收集、聚合和移動大量日誌資料到一個集中式的資料儲存區。 Flume 的使用不只限於日誌資料。因為資料來源可以定製,flume 可以被用來傳輸大量事件資料,這些資料不僅僅包括網路通訊資料、社交媒體產生的資料、電子郵件資訊等
最常見的作用是Flume 可用於移動大規模批量流資料到HDFS系統。從Web伺服器收集當前日誌檔案資料到HDFS聚集用於分析。
Flume 支援多種來源,如:
- tail (從本地檔案,該檔案的管道資料和通過Flume寫入 HDFS,類似於Unix命令“tail”)
- 系統日誌
- Apache log4j (允許Java應用程式通過Flume事件寫入到HDFS檔案)。
整體流程:Flume代理是JVM程式,裡面有3個組成部分 : Flume Source, Flume Channel 和 Flume Sink -通過該事件傳播發起在外部源之後
監聽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目錄檔案
- 將
flume-env.sh.template
複製一份,並改名為flume-env.sh
[root@master conf]# cp flume-env.sh.template flume-env.sh
複製程式碼
- 配置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
複製程式碼
- 最前面是通過bin下的flume-ng這個指令碼進行啟動;
- 下面就是啟動時候需要的一系列引數,-–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上可以看到,生成了對應的檔案
同時testlog1也會被flume標誌為已經掃描過的狀態 COMPLETED