一、Flume的介紹:
Flume由Cloudera公司開發,是一種提供高可用、高可靠、分布式海量日志采集、聚合和傳輸的系統,Flume支持在日志系統中定制各類數據發送方,用於采集數據;同時,flume提供對數據進行簡單處理,並寫到各種數據接收方的能力,如果能用一句話概括Flume,那么Flume是實時采集日志的數據采集引擎。
二、Flume的體系結構:
Flume的體系結構分成三個部分:數據源、Flume、目的地
數據源種類有很多:可以來自directory、http、kafka等,flume提供了source組件用來采集數據源。
1、source作用:采集日志
source種類:1、spooling directory source:采集目錄中的日志
2、htttp source:采集http中的日志
3、kafka source:采集kafka中的日志
……
采集到的日志需要進行緩存,flume提供了channel組件用來緩存數據。
2、channel作用:緩存日志
channel種類:1、memory channel:緩存到內存中(最常用)
2、JDBC channel:通過JDBC緩存到關系型數據庫中
3、kafka channel:緩存到kafka中
……
緩存的數據最終需要進行保存,flume提供了sink組件用來保存數據。
3、sink作用:保存日志
sink種類:1、HDFS sink:保存到HDFS中
2、HBase sink:保存到HBase中
3、Hive sink:保存到Hive中
4、kafka sink:保存到kafka中
……
官網中有flume各個組件不同種類的列舉:
三、安裝和配置Flume:
1、安裝:tar -zxvf apache-flume-1.7.0-bin.tar.gz -C ~/training
2、創建配置文件a4.conf:定義agent,定義source、channel、sink並組裝起來,定義生成日志文件的條件。
以下是a4.conf配置文件中的內容,其中定義了數據源來自目錄、數據緩存到內存中,數據最終保存到HDFS中,並且定義了生成日志文件的條件:日志文件大小達到128M或者經過60秒生成日志文件。
#定義agent名, source、channel、sink的名稱
a4.sources = r1
a4.channels = c1
a4.sinks = k1
#具體定義source
a4.sources.r1.type = spooldir
a4.sources.r1.spoolDir = /root/training/logs
#具體定義channel
a4.channels.c1.type = memory
a4.channels.c1.capacity = 10000
a4.channels.c1.transactionCapacity = 100
#定義攔截器,為消息添加時間戳
a4.sources.r1.interceptors = i1
a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#具體定義sink
a4.sinks.k1.type = hdfs
a4.sinks.k1.hdfs.path = hdfs://192.168.157.11:9000/flume/%Y%m%d
a4.sinks.k1.hdfs.filePrefix = events-
a4.sinks.k1.hdfs.fileType = DataStream
#不按照條數生成文件
a4.sinks.k1.hdfs.rollCount = 0
#HDFS上的文件達到128M時生成一個日志文件
a4.sinks.k1.hdfs.rollSize = 134217728
#HDFS上的文件達到60秒生成一個日志文件
a4.sinks.k1.hdfs.rollInterval = 60
#組裝source、channel、sink
a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1
四、使用Flume語句采集數據:
1、創建目錄,用於保存日志:
mkdir /root/training/logs
2、啟動Flume,准備實時采集日志:
bin/flume-ng.agent -n a4 -f myagent/a4.conf -c conf -Dflume.root.logger=INFO.console
3、將日志導入到目錄中:
cp * ~/training/logs
五、Sqoop和Flume的相同點和不同點:
相同點:sqoop和flume只有一種安裝模式,不存在本地模式、集群模式等。
不同點:sqoop批量采集數據,flume實時采集數據。
作者:李金澤AllenLi,清華大學碩士研究生,研究方向:大數據和人工智能