天天看點

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

 Flume支援衆多的source和sink類型,詳細手冊可參考官方文檔,更多source和sink元件

<a href="http://flume.apache.org/FlumeUserGuide.html">http://flume.apache.org/FlumeUserGuide.html</a>

Flume官網入門指南:

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)
日志采集架構Flume以及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資料采集示意圖:

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

 多級agent之間串聯示意圖:

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

 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

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

 啟動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的名字

 示範如下所示:

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

 啟動的資訊如下所示,可以啟動到前台,也可以啟動到背景:

 然後可以向這個端口發送資料,就列印出來了,因為這裡輸出是在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以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

然後可以看到flume已經接受到了資料:

日志采集架構Flume以及Flume的安裝部署(一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統)

如何退出telnet呢???

  首先按ctrl+]退出到telnet &gt; ,然後輸入telnet&gt; 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

 待續......