Flume支援衆多的source和sink類型,詳細手冊可參考官方文檔,更多source和sink元件
<a href="http://flume.apache.org/FlumeUserGuide.html">http://flume.apache.org/FlumeUserGuide.html</a>
Flume官網入門指南:
1:Flume的概述和介紹:
(1):Flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。 (2):Flume可以采集檔案,socket資料包等各種形式源資料,又可以将采集到的資料輸出到HDFS、hbase、hive、kafka等衆多外部存儲系統中 (3):一般的采集需求,通過對flume的簡單配置即可實作 (4):Flume針對特殊場景也具備良好的自定義擴充能力,是以,flume可以适用于大部分的日常資料采集場景
2:Flume的運作機制:
(1):Flume分布式系統中最核心的角色是agent,flume采集系統就是由一個個agent所連接配接起來形成。 (2):每一個agent相當于一個資料傳遞員,内部有三個元件: a):Source:采集源,用于跟資料源對接,以擷取資料。 b):Sink:下沉地,采集資料的傳送目的,用于往下一級agent傳遞資料或者往最終存儲系統傳遞資料。 c):Channel:angent内部的資料傳輸通道,用于從source将資料傳遞到sink。 注意:Source 到 Channel 到 Sink之間傳遞資料的形式是Event事件;Event事件是一個資料流單元。
下面介紹單個Agent的fulme資料采集示意圖:
多級agent之間串聯示意圖:
3:Flume的安裝部署:
(1)、Flume的安裝非常簡單,隻需要解壓即可,當然,前提是已有hadoop環境: a):上傳安裝包到資料源所在節點上,上傳過程省略。 b):然後解壓 tar -zxvf apache-flume-1.6.0-bin.tar.gz; [root@master package]# tar -zxvf apache-flume-1.6.0-bin.tar.gz -C /home/hadoop/ c):然後進入flume的目錄,修改conf下的flume-env.sh,在裡面配置JAVA_HOME;(由于conf目錄下面是 flume-env.sh.template,是以我複制一個flume-env.sh,然後進行修改JAVA_HOME) [root@master conf]# cp flume-env.sh.template flume-env.sh [root@master conf]# vim flume-env.sh 然後将#注釋去掉,加上自己的JAVA_HOME:export JAVA_HOME=/home/hadoop/jdk1.7.0_65 (2)、根據資料采集的需求配置采集方案,描述在配置檔案中(檔案名可任意自定義); (3)、指定采集方案配置檔案,在相應的節點上啟動flume agent; (4)、可以先用一個最簡單的例子來測試一下程式環境是否正常(在flume的conf目錄下建立一個檔案);
4:部署安裝好,可以開始配置采集方案(這裡是一個簡單的采集方案配置的使用,從網絡端口接收資料,然後下沉到logger), 然後需要配置一個檔案,這個采集配置檔案名稱,netcat-logger.conf,采集配置檔案netcat-logger.conf的内容如下所示:
下面在flume的conf目錄下面編輯這個檔案netcat-logger.conf:
[root@master conf]# vim netcat-logger.conf
啟動agent去采集資料,然後可以進行啟動了,啟動指令如下所示:
bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console
-c conf 指定flume自身的配置檔案所在目錄
-f conf/netcat-logger.con 指定我們所描述的采集方案
-n a1 指定我們這個agent的名字
示範如下所示:
啟動的資訊如下所示,可以啟動到前台,也可以啟動到背景:
然後可以向這個端口發送資料,就列印出來了,因為這裡輸出是在console的:
相當于産生資料的源:[root@master hadoop]# telnetlocalhost 44444
[root@master hadoop]# telnet localhost 44444 bash: telnet: command not found 我的機器沒有安裝telnet ,是以先安裝一下telnet ,如下所示: 第一步:檢測telnet-server的rpm包是否安裝 ??? [root@localhost ~]# rpm -qa telnet-server 若無輸入内容,則表示沒有安裝。出于安全考慮telnet-server.rpm是預設沒有安裝的,而telnet的用戶端是标配。即下面的軟體是預設安裝的。 第二步:若未安裝,則安裝telnet-server: [root@localhost ~]#yum install telnet-server 第三步:3、檢測telnet的rpm包是否安裝 ??? [root@localhost ~]# rpm -qa telnet telnet-0.17-47.el6_3.1.x86_64 第四步:若未安裝,則安裝telnet: [root@localhost ~]# yum install telnet 第五步:重新啟動xinetd守護程序??? 由于telnet服務也是由xinetd守護的,是以安裝完telnet-server,要啟動telnet服務就必須重新啟動xinetd [root@locahost ~]#service xinetd restart 完成以上步驟以後可以開始你的指令,如我的: [root@master hadoop]# telnet localhost 44444 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.
解決完上面的錯誤以後就可以開始測試telnet資料源發送和flume的接受:
測試,先要往agent采集監聽的端口上發送資料,讓agent有資料可采集,随便在一個能跟agent節點聯網的機器上:telnet localhost 44444
然後可以看到flume已經接受到了資料:
如何退出telnet呢???
首先按ctrl+]退出到telnet > ,然後輸入telnet> quit即可退出,記住,quit後面不要加;
5:flume監視檔案夾案例:
6:采集目錄到HDFS案例:
(1)采集需求:某伺服器的某特定目錄下,會不斷産生新的檔案,每當有新檔案出現,就需要把檔案采集到HDFS中去 (2)根據需求,首先定義以下3大要素 a):采集源,即source——監控檔案目錄 : spooldir b):下沉目标,即sink——HDFS檔案系統 : hdfs sink c):source和sink之間的傳遞通道——channel,可用file channel 也可以用記憶體channel (3):Channel參數解釋: capacity:預設該通道中最大的可以存儲的event數量; trasactionCapacity:每次最大可以從source中拿到或者送到sink中的event數量; keep-alive:event添加到通道中或者移出的允許時間;
配置檔案編寫:
7:采集檔案到HDFS案例:
(1):采集需求:比如業務系統使用log4j生成的日志,日志内容不斷增加,需要把追加到日志檔案中的資料實時采集到hdfs (2):根據需求,首先定義以下3大要素 采集源,即source——監控檔案内容更新 : exec ‘tail -F file’ 下沉目标,即sink——HDFS檔案系統 : hdfs sink Source和sink之間的傳遞通道——channel,可用file channel 也可以用 記憶體channel
待續......