flume的原理和使用

2021-06-21 21:55:55 字數 3602 閱讀 6763

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.gzapache-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針對特殊場景也具...