溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Flume是什么

發(fā)布時(shí)間:2021-12-09 09:16:00 來(lái)源:億速云 閱讀:219 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了Flume是什么,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

  Flume是Cloudera提供的一個(gè)高可用的、高可靠的開(kāi)源分布式海量日志收集系統(tǒng),日志數(shù)據(jù)可以經(jīng)過(guò)Flume流向需要存儲(chǔ)終端目的地。這里的日志是一個(gè)統(tǒng)稱(chēng),泛指文件、操作記錄等許多數(shù)據(jù)。

一、Flume基礎(chǔ)知識(shí)

1、數(shù)據(jù)流模型

   Flume的核心是把數(shù)據(jù)從數(shù)據(jù)源收集過(guò)來(lái),再送到目的地。為了保證輸送一定成功,在送到目的地之前,會(huì)先緩存數(shù)據(jù),待數(shù)據(jù)真正到達(dá)目的地后,刪除自己緩存的數(shù)據(jù)。

   Flume傳輸?shù)臄?shù)據(jù)的基本單位是Event,如果是文本文件,通常是一行記錄,這也是事務(wù)的基本單位。Event從Source,流向Channel,再到Sink,本身為一個(gè)byte數(shù)組,并可攜帶headers信息。Event代表著一個(gè)數(shù)據(jù)流的最小完整單元,從外部數(shù)據(jù)源來(lái),向外部的目的地去。

2、核心組件

   Flume運(yùn)行的核心是Agent。它是一個(gè)完整的數(shù)據(jù)收集工具,含有三個(gè)核心組件,分別是source、channel、sink。通過(guò)這些組件,Event可以從一個(gè)地方流向另一個(gè)地方,如圖1-1所示,也可以多級(jí)agent任一鏈接組合,如圖1-2所示。

Flume是什么

圖1-1 flume數(shù)據(jù)流模型

     Flume是什么

圖1-2 多級(jí)agent連接模型

   1) Source:專(zhuān)用于收集日志,可以處理各種類(lèi)型各種格式的日志數(shù)據(jù),包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定義等。

   ? Exec Source:以運(yùn)行 Linux 命令的方式,持續(xù)的輸出最新的數(shù)據(jù),如 tail -F 文件名 指令,在這種方式下,取的文件名必須是指定的。 ExecSource 可以實(shí)現(xiàn)對(duì)日志的實(shí)時(shí)收集,但是存在Flume不運(yùn)行或者指令執(zhí)行出錯(cuò)時(shí),將無(wú)法收集到日志數(shù)據(jù),無(wú)法保證日志數(shù)據(jù)的完整性;

   ? Spool Source:監(jiān)測(cè)配置的目錄下新增的文件,并將文件中的數(shù)據(jù)讀取出來(lái)。需要注意兩點(diǎn):拷貝到 spool 目錄下的文件不可以再打開(kāi)編輯;spool 目錄下不可包含相應(yīng)的子目錄;

   2) Channel:專(zhuān)用于臨時(shí)存儲(chǔ)數(shù)據(jù),可以存放在memory、jdbc、file、自定義等。其存儲(chǔ)的數(shù)據(jù)只有在sink發(fā)送成功之后才會(huì)被刪除。

   ? Memory Channel:可以實(shí)現(xiàn)高速的吞吐,但是無(wú)法保證數(shù)據(jù)的完整性。Memory Channel 是一個(gè)不穩(wěn)定的隧道,其原因是由于它在內(nèi)存中存儲(chǔ)所有事件。如果 java 進(jìn)程死掉,任何存儲(chǔ)在內(nèi)存的事件將會(huì)丟失。另外,內(nèi)存的空間也受到RAM大小的限制,與File Channel有差別;

   ? File Channel:保證數(shù)據(jù)的完整性與一致性。在具體配置FileChannel時(shí),建議FileChannel設(shè)置的目錄和程序日志文件保存的目錄設(shè)成不同的磁盤(pán),以便提高效率。File Channel是一個(gè)持久化的隧道(channel),它持久化所有的事件,并將其存儲(chǔ)到磁盤(pán)中。因此,即使 Java 虛擬機(jī)當(dāng)?shù)簦蛘卟僮飨到y(tǒng)崩潰或重啟,再或者事件沒(méi)有在管道中成功地傳遞到下一個(gè)代理(agent),這一切都不會(huì)造成數(shù)據(jù)丟失。

   3) Sink:專(zhuān)用于把數(shù)據(jù)發(fā)送到目的地件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定義等。

3、可靠性

   Flume的核心是把數(shù)據(jù)從數(shù)據(jù)源收集過(guò)來(lái),再送到目的地。為了保證輸送一定成功,在送到目的地之前,會(huì)先緩存數(shù)據(jù),待數(shù)據(jù)真正到達(dá)目的地后,刪除自己緩存的數(shù)據(jù)。

   Flume使用事務(wù)性的方式保證傳送Event整個(gè)過(guò)程的可靠性。Sink必須在Event被存入Channel 后,或者已經(jīng)被傳達(dá)到下一站agent里,又或者,已經(jīng)被存入外部數(shù)據(jù)目的地之后,才能把Event從Channel中remove掉。這樣數(shù)據(jù)流里的event無(wú)論是在一個(gè)agent里還是多個(gè)agent之間流轉(zhuǎn),都能保證可靠,因?yàn)橐陨系氖聞?wù)保證了event會(huì)被成功存儲(chǔ)起來(lái)。而Channel的多種實(shí)現(xiàn)在可恢復(fù)性上有不同的保證。也保證了event不同程度的可靠性。比如Flume支持在本地保存一份文件channel作為備份,而memory channel將event存在內(nèi)存queue里,速度快,但丟失的話無(wú)法恢復(fù)。

二、Flume安裝與使用

1、安裝

   官網(wǎng)(http://flume.apache.org/download.html)下載flume版本(本實(shí)驗(yàn):apache-flume-1.5.2-bin.tar.gz),解壓到/usr/local目錄下,進(jìn)入flume-xx/conf目錄中,執(zhí)行命令:mv flume-env.sh.properties flume-env.sh,然后配置flume-env.sh中的JAVA_HOME路徑。

2、一個(gè)示例

   本示例Source來(lái)自Spooling Directory,Sink流向HDFS。監(jiān)控/root/logs文件目錄下的文件,一旦有新文件,就立刻將文件內(nèi)容通過(guò)agent流向HDFS的hdfs://cluster1/flume/%Y%m%d文件中(此處如果找不到cluster1,需要將hadoop的配置文件core-site.xml和hdfs-site.xml拷貝至flume的conf目錄中)。

   flume目錄下新建test目錄,新建文件example,內(nèi)容如下:

#定義agent名, source、channel、sink的名稱(chēng)
agent1.sources = source1
agent1.channels = channel1
agent1.sinks = sink1

#具體定義source
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /home/logs
agent1.sources.source1.fileHeader = false
#定義攔截器,為消息添加時(shí)間戳
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder

#具體定義channel
#也可以將channel數(shù)據(jù)放在內(nèi)存(但是內(nèi)存容易丟失)中,如
#agent1.channels.c1.type = memory
#agent1.channels.c1.capacity = 10000
#agent1.channels.c1.transactionCapacity = 100
#此處配置為文件中
agent1.channels.channel1.type=file
#備份路徑
agent1.channels.channel1.checkpointDir=/root/flume_bak  
#數(shù)據(jù)保存路徑
agent1.channels.channel1.dataDirs=/root/flume_tmp  

#具體定義sink
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = hdfs://cluster1/flume/%Y%m%d
agent1.sinks.sink1.hdfs.fileType = DataStream
#存儲(chǔ)到HDFS文件名的前綴,格式為20140116-文件名..
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d  
#不按照條數(shù)生成文件
agent1.sinks.sink1.hdfs.rollCount = 0  
#HDFS上的文件達(dá)到128M時(shí)生成一個(gè)文件
agent1.sinks.sink1.hdfs.rollSize = 134217728  
#HDFS上的文件每60秒去檢測(cè)
agent1.sinks.sink1.hdfs.rollInterval = 60  

#組裝source、channel、sink
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

   運(yùn)行該示例,進(jìn)入/usr/local/flume目錄,執(zhí)行命令:bin/flume-ng agent -n agent1 -c conf -f test/example -Dflume.root.logger=DEBUG,console

   其中-n指定agent名稱(chēng),-c指定配置文件目錄,-f指定配置文件,-Dflume.root.logger=DEBUG,console設(shè)置日志等級(jí)為輸出到控制臺(tái)。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Flume是什么”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI