這篇文章主要介紹了Flume是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),乳源企業(yè)網(wǎng)站建設(shè),乳源品牌網(wǎng)站建設(shè),網(wǎng)站定制,乳源網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,乳源網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
Flume是Cloudera提供的一個高可用的、高可靠的開源分布式海量日志收集系統(tǒng),日志數(shù)據(jù)可以經(jīng)過Flume流向需要存儲終端目的地。這里的日志是一個統(tǒng)稱,泛指文件、操作記錄等許多數(shù)據(jù)。
一、Flume基礎(chǔ)知識
1、數(shù)據(jù)流模型
Flume的核心是把數(shù)據(jù)從數(shù)據(jù)源收集過來,再送到目的地。為了保證輸送一定成功,在送到目的地之前,會先緩存數(shù)據(jù),待數(shù)據(jù)真正到達(dá)目的地后,刪除自己緩存的數(shù)據(jù)。
Flume傳輸?shù)臄?shù)據(jù)的基本單位是Event,如果是文本文件,通常是一行記錄,這也是事務(wù)的基本單位。Event從Source,流向Channel,再到Sink,本身為一個byte數(shù)組,并可攜帶headers信息。Event代表著一個數(shù)據(jù)流的最小完整單元,從外部數(shù)據(jù)源來,向外部的目的地去。
2、核心組件
Flume運(yùn)行的核心是Agent。它是一個完整的數(shù)據(jù)收集工具,含有三個核心組件,分別是source、channel、sink。通過這些組件,Event可以從一個地方流向另一個地方,如圖1-1所示,也可以多級agent任一鏈接組合,如圖1-2所示。
圖1-1 flume數(shù)據(jù)流模型
圖1-2 多級agent連接模型
1) Source:專用于收集日志,可以處理各種類型各種格式的日志數(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)對日志的實(shí)時收集,但是存在Flume不運(yùn)行或者指令執(zhí)行出錯時,將無法收集到日志數(shù)據(jù),無法保證日志數(shù)據(jù)的完整性;
? Spool Source:監(jiān)測配置的目錄下新增的文件,并將文件中的數(shù)據(jù)讀取出來。需要注意兩點(diǎn):拷貝到 spool 目錄下的文件不可以再打開編輯;spool 目錄下不可包含相應(yīng)的子目錄;
2) Channel:專用于臨時存儲數(shù)據(jù),可以存放在memory、jdbc、file、自定義等。其存儲的數(shù)據(jù)只有在sink發(fā)送成功之后才會被刪除。
? Memory Channel:可以實(shí)現(xiàn)高速的吞吐,但是無法保證數(shù)據(jù)的完整性。Memory Channel 是一個不穩(wěn)定的隧道,其原因是由于它在內(nèi)存中存儲所有事件。如果 java 進(jìn)程死掉,任何存儲在內(nèi)存的事件將會丟失。另外,內(nèi)存的空間也受到RAM大小的限制,與File Channel有差別;
? File Channel:保證數(shù)據(jù)的完整性與一致性。在具體配置FileChannel時,建議FileChannel設(shè)置的目錄和程序日志文件保存的目錄設(shè)成不同的磁盤,以便提高效率。File Channel是一個持久化的隧道(channel),它持久化所有的事件,并將其存儲到磁盤中。因此,即使 Java 虛擬機(jī)當(dāng)?shù)?,或者操作系統(tǒng)崩潰或重啟,再或者事件沒有在管道中成功地傳遞到下一個代理(agent),這一切都不會造成數(shù)據(jù)丟失。
3) Sink:專用于把數(shù)據(jù)發(fā)送到目的地件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定義等。
3、可靠性
Flume的核心是把數(shù)據(jù)從數(shù)據(jù)源收集過來,再送到目的地。為了保證輸送一定成功,在送到目的地之前,會先緩存數(shù)據(jù),待數(shù)據(jù)真正到達(dá)目的地后,刪除自己緩存的數(shù)據(jù)。
Flume使用事務(wù)性的方式保證傳送Event整個過程的可靠性。Sink必須在Event被存入Channel 后,或者已經(jīng)被傳達(dá)到下一站agent里,又或者,已經(jīng)被存入外部數(shù)據(jù)目的地之后,才能把Event從Channel中remove掉。這樣數(shù)據(jù)流里的event無論是在一個agent里還是多個agent之間流轉(zhuǎn),都能保證可靠,因?yàn)橐陨系氖聞?wù)保證了event會被成功存儲起來。而Channel的多種實(shí)現(xiàn)在可恢復(fù)性上有不同的保證。也保證了event不同程度的可靠性。比如Flume支持在本地保存一份文件channel作為備份,而memory channel將event存在內(nèi)存queue里,速度快,但丟失的話無法恢復(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、一個示例
本示例Source來自Spooling Directory,Sink流向HDFS。監(jiān)控/root/logs文件目錄下的文件,一旦有新文件,就立刻將文件內(nèi)容通過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的名稱 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 #定義攔截器,為消息添加時間戳 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 #存儲到HDFS文件名的前綴,格式為20140116-文件名.. agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d #不按照條數(shù)生成文件 agent1.sinks.sink1.hdfs.rollCount = 0 #HDFS上的文件達(dá)到128M時生成一個文件 agent1.sinks.sink1.hdfs.rollSize = 134217728 #HDFS上的文件每60秒去檢測 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名稱,-c指定配置文件目錄,-f指定配置文件,-Dflume.root.logger=DEBUG,console設(shè)置日志等級為輸出到控制臺。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Flume是什么”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!