flume是cloudera公司的一款高效能、高可能的分布式日誌收集系統。
flume的核心是把資料從資料來源收集過來,再送到目的地。為了保證輸送一定成功,在送到目的地之前,會先快取資料,待資料真正到達目的地後,刪除自己快取的資料。
flume傳輸的資料的基本單位是event,如果是文字檔案,通常是一行記錄,這也是事務的基本單位。
flume執行的核心是agent。它是乙個完整的資料收集工具,含有三個核心元件,分別是source、channel、sink。通過這些元件,event可以從乙個地方流向另乙個地方,如下圖所示。
source可以接收外部源傳送過來的資料。不同的source,可以接受不同的資料格式。比如有目錄池(spooling directory)資料來源,可以監控指定資料夾中的新檔案變化,如果目錄中有檔案產生,就會立刻讀取其內容。
channel是乙個儲存地,接收source的輸出,直到有sink消費掉channel中的資料。channel中的資料直到進入到下乙個channel中或者進入終端才會被刪除。當sink寫入失敗後,可以自動重啟,不會造成資料丟失,因此很可靠。
sink會消費channel中的資料,然後送給外部源或者其他source。如資料可以寫入到hdfs或者hbase中。
flume允許多個agent連在一起,形成前後相連的多級跳。
apache-flume-1.4.0-bin.tar.gz和apache-flume-1.4.0-src.tar.gz
2.分別解壓,然後把src專案中的所有內容複製到bin專案中
3.刪除src專案,把bin專案重新命名為flume
4.配置到環境變數中
5.書寫agent配置
使用flume的核心是如何配置agent檔案。agent的配置是乙個普通文字檔案,使用鍵值對形式儲存配置資訊,可以設定多個agent資訊。配置的內容包括source、channel、sink等。元件source、channel、sink都有名稱、型別和很多個性化的屬性配置。
配置檔案應該這麼寫
# list the sources, sinks and channels for the agent
.sources =
.sinks =
.channels =
# set channel for source
.sources..channels = ...
# set channel for sink
.sinks..channel =
# properties for sources
.sources..=
# properties for channels
.channel..=
# properties for sinks
.sources..=
# 下面是示例
#下面的agent1是**名稱,對應有source,名稱是src1,;有乙個sink,名稱是sink1;有乙個channel,名稱是ch1.
agent1.sources = src1
agent1.sinks = sink1
agent1.channels = ch2
# 配置目錄 source,監控目錄(必須存在)的變化,要求檔名必須唯一,否則flume報錯
agent1.sources.src1.type = spooldir
agent1.sources.src1.channels = ch2
agent1.sources.src1.spooldir = /root/hmbbs
agent1.sources.src1.fileheader = false
agent1.sources.src1.interceptors = i1
agent1.sources.src1.interceptors.i1.type = timestamp
# 配置記憶體 channel
agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity = 1000
agent1.channels.ch1.transactioncapacity = 1000
agent1.channels.ch1.bytecapacitybufferpercentage = 20
agent1.channels.ch1.bytecapacity = 800000
# 配置檔案 channel
agent1.channels.ch2.type = file
agent1.channels.ch2.checkpointdir = /root/flumechannel/checkpoint
agent1.channels.ch2.datadirs = /root/flumechannel/data
# 配置hdfs sink
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.channel = ch2
agent1.sinks.sink1.hdfs.path = hdfs://hadoop0:9000/flume/%y-%m-%d/
agent1.sinks.sink1.hdfs.rollinterval=1
agent1.sinks.sink1.hdfs.filetype = datastream
agent1.sinks.sink1.hdfs.writeformat = text
# 配置hbase sink
#配置hbase sink2
agent1.sinks.sink2.type = hbase
agent1.sinks.sink2.channel = channel1
agent1.sinks.sink2.table = hmbbs
agent1.sinks.sink2.columnfamily = cf
agent1.sinks.sink2.serializer = flume.hmbbshbaseeventserializer
agent1.sinks.sink2.serializer.suffix = timestamp
agent1.sinks.sink2.serializer = org.apache.flume.sink.hbase.******hbaseeventserializer
5.啟動**的指令碼是flume-ng agent,需要指定agent name、配置目錄、配置檔案
-n 指定agent名稱
-c 指定配置檔案目錄
-f 指定配置檔案
-dflume.root.logger=debug,console
因此完整的啟動命令應該這麼寫
bin/flume-ng agent –n agent1 –c conf –f conf/example –dflume.root.logger=debug,console
啟動成功後,可以向目錄/root/hmbbs中放入檔案,flume會感知到新檔案,然後上傳到hdfs的/flume目錄下。
Flume 事務和內部原理
flume使用兩個獨立的事務分別負責從soucrce到channel,以及從channel到sink的事件傳遞。在source到channel之間的叫put事務,在channel到sink之間的叫take事務。事務兩個特性就是 成功了提交,失敗了回滾。從source到channel過程中,資料在fl...
flume的概念和基本使用
flume是乙個分布式的 可靠的 可用的以及高效的對大量資料日誌進行收集 聚集 移動資訊的服務。flume是乙個可容錯的 健壯的並且非常簡單的流式資料框架,他只需要簡單配置source channel以及sink後,編寫一條命令就可實時採集資料。agent的三個組成部分為 source channe...
Flume工作原理詳解
flume是乙個分布式 可靠 和高可用的海量日誌採集 聚合和傳輸的系統。flume可以採集檔案 socket資料報等各種形式源資料,又可以將採集到的資料輸出到hdfs hbase hive kafka等眾多外部儲存系統中。一般的採集需求,通過對flume的簡單配置即可實現。flume針對特殊場景也具...