○ Flume是由cloudera開發的實時日誌收集系統
○ 核心概念是由一個叫作Agent(代理節點)的java進程運行在日誌收集節點
○ Flume在0.94.0版本之前(包含0.94.0版本)稱爲Cloudera Flume OG,因爲0.94.0版本之前存在各類缺陷,所以不得不從新設計Flume並改名爲Apache Flume NG(1.0.0開始)
○ Flume NG VS Flume OG
- 目前版本都是Flume NG(1.0.0版本以後)
架構方面:
□ Flume OG有三種角色的節點:代理節點agent、收集節點collector、主節點master
□ agent負責從各個數據源收集日誌數據、將收集到的數據集中到collector,再由collector節點彙總存入到HDFS.而master負責管理agent\collector的活動
□ agent、collector都稱爲node,node的角色根據配置的不一樣分爲邏輯節點和物理節點,對於邏輯節點的區分、配置、使用很是複雜.
□ agent、collector由source、sink組成,表示當前節點的數據從source傳送到sink html
以上相對於Flume NG來講: java
□ Flume NG只有一種角色節點:代理節點agent
□ 沒有collector、master節點,這是最核心的變化.
□ 去除邏輯節點和物理節點的概念和內容
□ agent節點的組成發生變化,由source 、sink、channel三個組件組成
Zookeeper方面:
□ Flume OG的穩定性依賴zookeeper,它須要zookeeper對其多類節點的工做進行管理,雖然OG可使用內存的方式對各種節點進行管理,但須要用戶忍受機器出現故障時信息丟失的出現.
□ Flume NG的節點角色數量由原來的3個縮減爲1個,不存在多類角色的問題,因此再也不須要zookeeper對各種節點協調的做用,由此脫離了對zookeeper的依賴. node
一個Agent進程包含了三個組件:Source組件、Channel組件、Sink組件,Source組件負責收集日誌文件併發送給Channel組件,Channel組件造成一個管道,再由Sink組件讀取Channel組件中的日誌文件併發送給其餘目標或者文件系統 shell
Source組件:專門收集日誌文件,能夠處理各類類型的日誌數據,如:Avro、Thrift、Exec、JMS、Spooling Directory、Twitter、Kafka、NetCat、Sequence Generator、Syslog、HTTP、Stress、Legacy、Custom(自定義格式)、Scribe
Channel組件:專門用於存放臨時文件,存儲的位置能夠是Memory、JDBC、Kafka、File、Spillable Memory、Pseudo Transaction、Custom(自定義)
Sink組件:專門用於發送存放在Channel組件中的數據,發送的目標包括:HDFS、Hive、Logger、Thrift、IRC、File Roll、Null、HBase、MorphlineSolr、ElasticSearch、Kite Dataset、Kafka、Custom(自定義)
Note:
○ 具體各類使用請參官方文檔:http://flume.apache.org/FlumeUserGuide.html#flume-sink-processors
○ Channel中的數據只有在Sink組件發送成功後纔會被刪除
○ 在整個數據的傳輸過程當中流動的是event,event能夠理解爲是flume中數據傳輸的基本單位,event表現爲一條條的數據,其事務保證是event級別.
○ flume支持多級flume的agent,支持扇入(fan-in)\扇出(fan-out) apache
Note: 架構
○ Sink支持發送多個目標 併發
○ 下載
apache-flume-1.6.0-bin.tar.gz
JDK版本:1.6+
○ 解壓FLUME_HOME app
tar -zxvf apache-flume-1.6.0-bin.tar.gz
○ 安裝JDK、配置JAVA_HOME、FLUME_HOME. ide
vi /etc/profile export FLUME_HOME=/home/app/flume export PATH=.:$FLUME_HOME/bin
○ 一個簡單的例子,監控/home/data/logs目錄,一旦有發現文件當即上傳到hdfs中
□ 首先編寫一個配置文件,文件名爲:example.conf ui
#agent1表示代理名稱 agent1.sources=source1 agent1.sinks=sink1 agent1.channels=channel1 #Spooling Directory是監控指定文件夾中新文件的變化,一旦新文件出現,就解析該文件內容,而後寫入到channle。寫入完成後,標記該文件已完成或者刪除該文件。 #配置source1 agent1.sources.source1.type=spooldir #指定監控的目錄 agent1.sources.source1.spoolDir=/home/data/logs agent1.sources.source1.channels=channel1 agent1.sources.source1.fileHeader = false agent1.sources.source1.interceptors = i1 agent1.sources.source1.interceptors.i1.type = timestamp #配置sink1 agent1.sinks.sink1.type=hdfs agent1.sinks.sink1.hdfs.path=hdfs://master:9000/flume/data agent1.sinks.sink1.hdfs.fileType=DataStream agent1.sinks.sink1.hdfs.writeFormat=TEXT agent1.sinks.sink1.hdfs.rollInterval=1 agent1.sinks.sink1.channel=channel1 agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d #配置channel1 agent1.channels.channel1.type=file #channel數據存放的備份目錄 agent1.channels.channel1.checkpointDir=/home/data/channel_data.backup #channel數據存放目錄 agent1.channels.channel1.dataDirs=/home/data/channel_data
□ 將example.conf文件放到$FLUME_HOME/conf文件夾下
□ 啓動agent進程命令:須要指定agent的名字、指定配置目錄和配置文件
官方格式:
bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template
在例子中編寫成以下↓↓
bin/flume-ng agent -n agent1 -c conf -f conf/example.conf -Dflume.root.logger=DEBUG,console -Dflume.root.logger=DEBUG,console是在控制檯打印信息
□ 從新打開一個終端,上傳一個文件到/home/data/logs □ /home/data/logs中的文件被改名爲.COMPLETED,查看HDFS文件存在,配置完畢 待續更新...