1. 程式人生 > >Hadoop-Flume日誌采集系統

Hadoop-Flume日誌采集系統

各類 events exec 外部 lec deb sources 高可用性 通信

Flume是Cloudera提供的日誌收集系統,具有分布式、高可靠、高可用性等特點,對海量日誌采集、聚合和傳輸,Flume支持在日誌系統中制定各類數據發送,同時,Flume提供對數據進行簡單處理,並寫到各種數接受方的能力。其設計的原理也是基於將數據流,如日誌數據從各種網站服務器上匯集起來存儲到HDFS,HBase等集中存儲器中。

Flume的特征:可靠性,可擴展性,可管理性

接下來我們說的是Flume NG架構的優勢:

1、NG 在核心組件上進行了大規模的調整

2、大大降低了對用戶的要求,如用戶無需搭建ZooKeeper集群

3、有利於 Flume 和其他技術、hadoop 周邊組件的整合

4、在功能上更加強大、可擴展性更高

Flume的核心是把數據從數據源收集過來,在送到目的地,為了保證輸送一定成功,在送到目的地之前,會先緩存數據,待數據真正到達目的地後,刪除自己緩存的數據
Flume傳輸的數據基本單位是Event,如果是文本文件,通常是一行記錄,這也是事務的基本單位。Event從Source,流向Channel,再到Sink,本身為一個byte數組,並可攜帶headers信息。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連在一起,形成前後相連的多級跳:

技術分享

Flume架構核心組件:

source:source負責接收event或通過特殊機制產生event,並將events批量的放到一個或多個channel,source必須至少和一個channel關聯

不同類型的source:與系統集成的source: Syslog, Netcat;直接讀取文件的 source: ExecSource、SpoolSource;用於Agent和Agent之間通信的IPC Source: Avro、Thrift

channel:channel位於source和sink之間,用於緩存進來的event。當Sink成功的將event發送到下一跳的channel或最終目的時候,event從Channel移除。

幾種channel類型:MemoryChannel 可以實現高速的吞吐,但是無法保證數據的完整性;FileChannel(磁盤channel)保證數據的完整性與一致性。在具體配置FileChannel時,建議FileChannel設置的目錄和程序日誌文件保存的目錄設成不同的磁盤,以便提高效率

sink:Sink負責將event傳輸到下一跳或最終目的;sink在設置存儲數據時,可以向文件系統、數據庫、Hadoop存數據,在日誌數據較少時,可以將數據存儲在文件系統中,並且設定一定的時間間隔保存數據。在日誌數據較多時,可以將相應的日誌數據存儲到hadoop中,便於日後進行相應的數據分析。必須作用於一個確切的channel

下載源碼包:http://mirror.bit.edu.cn/apache/flume/1.6.0/

1、安裝軟件包:

[lan@master ~]$ tar -xvf apache-flume-1.6.0-bin.tar.gz
[lan@master ~]$ tar -xvf apache-flume-1.6.0-src.tar.gz

2、將源碼合並至安裝目錄apache-flume-1.6.0-bin下

配置環境變量:

[lan@master ~]$ vim ~/.bash_profile

export FLUME_HOME=/home/lan/apache-flume-1.6.0-bin/
export PATH=$PATH:$FLUME_HOME/bin

測試flume-ng是否安裝成功:

flume-ng version

3、

新建一個flume代理agent1的配置文件example.conf
[lan@master ~]$ cd apache-flume-1.6.0-bin/conf/
[lan@master conf]$ vim example.conf

#agent1
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = c1

#source1
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /home/lan/agent1log
agent1.sources.source1.channels = c1
agent1.sources.source1.fileHeader = false

#sink1
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = hdfs://master:9000/agentlog
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat = TEXT
agent1.sinks.sink1.hdfs.rollInteval = 4
agent1.sinks.sink1.channel = c1

#channel1
agent1.channels.c1.type = file
agent1.channels.c1.checkpointDir = /home/lan/agent1_tmp1
agent1.channels.c1.dataDirs = /home/lan/agent1_tmpdata
#agent1.channels.channel1.capacity = 10000
#agent1.channels.channel.transactionCapacity = 1000

新建agent1log:

[lan@master ~]$ mkdir agent1log

[lan@master ~]$ cd apache-flume-1.6.0-bin

[lan@master apache-flume-1.6.0-bin]$ flume-ng agent -n agent1 -c conf -f /home/lan/apache-flume-1.6.0-bin/conf/example.conf -Dflume.root.logger=DEBUG,console

另啟一個terminal,在監測目錄下創建新的文件test2.txt
cd ~/agent1log
vim test2.txt

查看sink1的輸出,發現目標路徑下有一個以FlumeData開始,產生文件的時間戳為後綴的文件,說明flume能監測到目標目錄變化,將產生變化的部分實時地收集到sink的輸出中。

Hadoop-Flume日誌采集系統