1、日志采集框架Flume
1.1 Flume介紹
Flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。
Flume可以采集文件,socket數據包等各種形式源數據,又可以將采集到的數據輸出到HDFS、hbase、hive、
kafka等眾多外部存儲系統中
一般的采集需求,通過對flume的簡單配置即可實現
Flume針對特殊場景也具備良好的自定義擴展能力,因此,flume可以適用於大部分的日常數據采集場景
1.2 運行機制
1、 Flume分布式系統中最核心的角色是agent,flume采集系統就是由一個個agent所連接起來形成
2、 每一個agent相當於一個數據傳遞員(Source 到 Channel 到 Sink之間傳遞數據的形式是Event事件;
Event事件是一個數據流單元。) ,內部有三個組件:
a) Source:采集源,用於跟數據源對接,以獲取數據
b) Sink:下沉地,采集數據的傳送目的,用於往下一級agent傳遞數據或者往最終存儲系統傳遞數據
c) Channel:angent內部的數據傳輸通道,用於從source將數據傳遞到sink
1.3 采集案例
1、采集目錄到HDFS
采集需求:某服務器的某特定目錄下,會不斷產生新的文件,每當有新文件出現,就需要把文件采集到HDFS中去
根據需求,首先定義以下3大要素
1) 采集源,即source——監控文件目錄 : spooldir
2) 下沉目標,即sink——HDFS文件系統 : hdfs sink
3) source和sink之間的傳遞通道——channel,可用file channel 也可以用內存channel
配置文件編寫:
# 配置source組件
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /home/hadoop/logs/
# 配置sink組件
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path =hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H-%M
agent1.sinks.sink1.hdfs.filePrefix = access_log
Channel參數解釋:
capacity:默認該通道中最大的可以存儲的event數量
trasactionCapacity:每次最大可以從source中拿到或者送到sink中的event數量
keep-alive:event添加到通道中或者移出的允許時間
2、采集文件到HDFS
采集需求:比如業務系統使用log4j生成的日志,日志內容不斷增加,需要把追加到日志文件中的數據實時采集到hdfs
根據需求,首先定義以下3大要素
1) 采集源,即source——監控文件內容更新 : exec ‘tail -F file’
2) 下沉目標,即sink——HDFS文件系統 : hdfs sink
3) Source和sink之間的傳遞通道——channel,可用file channel 也可以用 內存channel
# Describe/configure tail -F source1
agent1.sources.source1.type = exec
agent1.sources.source1.command = tail -F /home/hadoop/logs/access_log
agent1.sources.source1.channels = channel1
# Describe sink1
agent1.sinks.sink1.type = hdfs
#a1.sinks.k1.channel = c1
agent1.sinks.sink1.hdfs.path =hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H-%M
agent1.sinks.sink1.hdfs.filePrefix = access_log