分布式進階(二十一)Flume的基礎介紹

      網友投稿 812 2022-05-28

      一、背景

      Hadoop業務的整體開發流程:

      從Hadoop的業務開發流程圖中可以看出,在大數據的業務處理過程中,對于數據的采集是十分重要的一步,也是不可避免的一步.

      許多公司的平臺每天會產生大量的日志(一般為流式數據,如,搜索引擎的pv,查詢等),處理這些日志需要特定的日志系統,一般而言,這些系統需要具有以下特征:

      (1) 構建應用系統和分析系統的橋梁,并將它們之間的關聯解耦;

      (2) 支持近實時的在線分析系統和類似于Hadoop之類的離線分析系統;

      (3) 具有高可擴展性。即:當數據量增加時,可以通過增加節點進行水平擴展。

      開源的日志系統,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。

      二、Flume的簡介

      flume 作為 cloudera 開發的實時日志收集系統,受到了業界的認可與廣泛應用。Flume 初始的發行版本目前被統稱為 Flume OG(original generation),屬于 cloudera。

      但隨著 FLume 功能的擴展,Flume OG 代碼工程臃腫、核心組件設計不合理、核心配置不標準等缺點暴露出來,尤其是在 Flume OG 的最后一個發行版本 0.9.4. 中,日志傳輸不穩定的現象尤為嚴重,為了解決這些問題,2011 年 10 月 22 號,cloudera 完成了 Flume-728,對 Flume 進行了里程碑式的改動:重構核心組件、核心配置以及代碼架構,重構后的版本統稱為 Flume NG(next generation);改動的另一原因是將 Flume 納入 apache 旗下,cloudera Flume 改名為 Apache Flume。

      Flume是Apache的頂級項目,官方網站:http://flume.apache.org/

      Flume是一個分布式、可靠、高可用的海量日志聚合系統,支持在系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據的簡單處理,并寫到各種數據接收方的能力。

      Flume 在0.9.x and 1.x之間有較大的架構調整,1.x版本之后的改稱Flume NG,0.9.x的稱為Flume OG。

      Flume目前只有Linux系統的啟動腳本,沒有Windows環境的啟動腳本。

      三、Flume NG的介紹

      3.1 Flume特點

      flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(比如文本、HDFS、Hbase等)的能力 。

      flume的數據流由事件(Event)貫穿始終。事件是Flume的基本數據單位,它攜帶日志數據(字節數組形式)并且攜帶有頭信息,這些Event由Agent外部的Source生成,當Source捕獲事件后會進行特定的格式化,然后Source會把事件推入(單個或多個)Channel中。你可以把Channel看作是一個緩沖區,它將保存事件直到Sink處理完該事件。Sink負責持久化日志或者把事件推向另一個Source。

      (1)flume的可靠性

      當節點出現故障時,日志能夠被傳送到其他節點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別為:end-to-end(收到數據agent首先將event寫到磁盤上,當數據傳送成功后,再刪除;如果數據發送失敗,可以重新發送。),Store on failure(這也是scribe采用的策略,當數據接收方crash時,將數據寫到本地,待恢復后,繼續發送),Besteffort(數據發送到接收方后,不會進行確認)。

      (2)flume的可恢復性

      還是靠Channel。推薦使用FileChannel,事件持久化在本地文件系統里(性能較差)。

      3.2 Flume的一些核心概念

      Client:Client生產數據,運行在一個獨立的線程。

      Event: 一個數據單元,消息頭和消息體組成。(Events可以是日志記錄、 avro 對象等。)

      Flow: Event從源點到達目的點的遷移的抽象。

      Agent: 一個獨立的Flume進程,包含組件Source、 Channel、 Sink。(Agent使用JVM 運行Flume。每臺機器運行一個agent,但是可以在一個agent中包含多個sources和sinks。)

      Source: 數據收集組件。(source從Client收集數據,傳遞給Channel)

      Channel: 中轉Event的一個臨時存儲,保存由Source組件傳遞過來的Event。(Channel連接 sources 和 sinks ,這個有點像一個隊列。)

      Sink: 從Channel中讀取并移除Event, 將Event傳遞到FlowPipeline中的下一個Agent(如果有的話)(Sink從Channel收集數據,運行在一個獨立線程。)

      3.3 Flume NG的體系結構

      Flume 運行的核心是 Agent。Flume以agent為最小的獨立運行單位。一個agent就是一個JVM。它是一個完整的數據收集工具,含有三個核心組件,分別是source、 channel、 sink。通過這些組件, Event 可以從一個地方流向另一個地方,如下圖所示。

      3.4 Source

      Source是數據的收集端,負責將數據捕獲后進行特殊的格式化,將數據封裝到事件(event) 里,然后將事件推入Channel中。

      Flume提供了各種source的實現,包括Avro Source、Exce Source、Spooling Directory Source、NetCat Source、Syslog Source、Syslog TCP Source、Syslog UDP Source、HTTP Source、HDFS Source,etc。如果內置的Source無法滿足需要, Flume還支持自定義Source。

      3.5 Channel

      Channel是連接Source和Sink的組件,大家可以將它看做一個數據的緩沖區(數據隊列),它可以將事件暫存到內存中也可以持久化到本地磁盤上, 直到Sink處理完該事件。

      Flume對于Channel,則提供了Memory Channel、JDBC Chanel、File Channel,etc。

      MemoryChannel可以實現高速的吞吐,但是無法保證數據的完整性。

      MemoryRecoverChannel在官方文檔的建議上已經建義使用FileChannel來替換。

      FileChannel保證數據的完整性與一致性。在具體配置不限的FileChannel時,建議FileChannel設置的目錄和程序日志文件保存的目錄設成不同的磁盤,以便提高效率。

      3.6 Sink

      Flume Sink取出Channel中的數據,進行相應的存儲文件系統,數據庫,或者提交到遠程服務器。

      Flume也提供了各種sink的實現,包括HDFS sink、Logger sink、Avro sink、File Roll sink、Null sink、HBase sink,etc。

      分布式進階(二十一)Flume的基礎介紹

      Flume Sink在設置存儲數據時,可以向文件系統中,數據庫中,hadoop中儲數據,在日志數據較少時,可以將數據存儲在文件系中,并且設定一定的時間間隔保存數據。在日志數據較多時,可以將相應的日志數據存儲到Hadoop中,便于日后進行相應的數據分析。

      四、Flume的部署類型

      4.1 單一流程

      4.2 多代理流程(多個agent順序連接)

      可以將多個Agent順序連接起來,將最初的數據源經過收集,存儲到最終的存儲系統中。這是最簡單的情況,一般情況下,應該控制這種順序連接的Agent 的數量,因為數據流經的路徑變長了,如果不考慮failover的話,出現故障將影響整個Flow上的Agent收集服務。

      4.3 流的合并(多個Agent的數據匯聚到同一個Agent )

      這種情況應用的場景比較多,比如要收集Web網站的用戶行為日志, Web網站為了可用性使用的負載集群模式,每個節點都產生用戶行為日志,可以為每 個節點都配置一個Agent來單獨收集日志數據,然后多個Agent將數據最終匯聚到一個用來存儲數據存儲系統,如HDFS上。

      4.4 多路復用流(多級流)

      Flume還支持多級流,什么是多級流?來舉個例子,當syslog, java, nginx、 tomcat等混合在一起的日志流開始流入一個agent后,可以agent中將混雜的日志流分開,然后給每種日志建立一個自己的傳輸通道。

      4.5 load balance功能

      下圖Agent1是一個路由節點,負責將Channel暫存的Event均衡到對應的多個Sink組件上,而每個Sink組件分別連接到一個獨立的Agent上 。

      五、Flume的安裝

      5.1 Flume的下載

      -:

      http://mirrors.hust.edu.cn/apache/

      http://flume.apache.org/download.html

      5.2 Flume的安裝

      Flume框架對hadoop和zookeeper的依賴只是在jar包上,并不要求flume啟動時必須將hadoop和zookeeper服務也啟動。

      (1)將安裝包上傳到服務器并解壓

      [hadoop@hadoop1 ~]$ tar -zxvf apache-flume-1.8.0-bin.tar.gz -C apps/

      (2)創建軟連接

      [hadoop@hadoop1 ~]$ ln -s apache-flume-1.8.0-bin/ flume

      (3)修改配置文件

      /home/hadoop/apps/apache-flume-1.8.0-bin/conf

      1

      [hadoop@hadoop1 conf]$ cp flume-env.sh.template flume-env.sh

      (4)配置環境變量

      [hadoop@hadoop1 conf]$ vi ~/.bashrc

      #FLUME

      export FLUME_HOME=/home/hadoop/apps/flume export PATH=$PATH:$FLUME_HOME/bin

      1

      2

      保存使其立即生效

      [hadoop@hadoop1 conf]$ source ~/.bashrc

      (5)查看版本

      [hadoop@hadoop1 ~]$ flume-ng version

      Apache 分布式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:簡書markdown寫技術博客
      下一篇:FusionInsight 集群功能介紹-Flume
      相關文章
      在线播放亚洲精品| 苍井空亚洲精品AA片在线播放| 亚洲午夜激情视频| 狼人大香伊蕉国产WWW亚洲| 狠狠色伊人亚洲综合网站色| 亚洲三级视频在线| 亚洲综合校园春色| 精品国产成人亚洲午夜福利| 亚洲最大无码中文字幕| 国产 亚洲 中文在线 字幕| 亚洲五月综合缴情婷婷| 国产亚洲sss在线播放| 国产亚洲福利在线视频| 亚洲精品9999久久久久无码| 亚洲hairy多毛pics大全| 久久精品国产亚洲AV天海翼| 苍井空亚洲精品AA片在线播放| av无码东京热亚洲男人的天堂| 在线91精品亚洲网站精品成人| 大胆亚洲人体视频| 亚洲日韩国产精品乱| 亚洲午夜福利精品无码| 亚洲精品高清国产一线久久| 亚洲国产精品VA在线观看麻豆| 亚洲五月激情综合图片区| 亚洲经典在线中文字幕| 亚洲va成无码人在线观看| 亚洲中文字幕无码爆乳| 亚洲av无码一区二区三区在线播放| 国产亚洲精品第一综合| 中文字幕人成人乱码亚洲电影| 亚洲国产精品VA在线观看麻豆| 一区二区三区亚洲| 亚洲av片不卡无码久久| 亚洲精品天堂无码中文字幕| 亚洲av日韩av欧v在线天堂| 伊人久久大香线蕉亚洲| 亚洲国产精品免费视频| 亚洲国产av美女网站| 亚洲日韩中文字幕一区| 亚洲成年看片在线观看|