Hadoop生态Flume(一)介绍
一、概述
Apache Flume是一個分布式,可靠且可用的系統,用于有效地收集,聚合大量日志數據并將其從許多不同的源移動到集中式數據存儲中。
Apache Flume的使用不僅限于日志數據聚合。由于數據源是可定制的,因此Flume可用于傳輸大量事件數據,包括但不限于網絡流量數據,社交媒體生成的數據,電子郵件消息以及幾乎所有可能的數據源。
Apache Flume是Apache Software Foundation的頂級項目。
(1)起源
Flume是Cloudera提供的一個高可用的、高可靠的、分布式的海量日志收集、聚合和傳輸的系統,Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫道各種數據接收方(可定制)的能力。
Flume初始的發行版本目前被統稱為“Flume OG(original generation)”,屬于 Cloudera。但隨著FLume功能的擴展,“Flume OG”代碼工程臃腫、核心組件設計不合理、核心配置不標準等缺點暴露出來,尤其是在“Flume OG”的最后一個發行版本0.94.0中,日志傳輸不穩定的現象尤為嚴重,為了解決這些問題,2011年10月22號,Cloudera完成了“Flume-728”,對Flume進行了里程碑式的改動:重構核心組件、核心配置以及代碼架構,重構后的版本統稱為“Flume NG(next generation)”;改動的另一原因是將 Flume 納入Apache旗下,“Cloudera Flume”改名為“Apache Flume”。
(2)重要版本
Flume 0.9X版本的統稱Flume-og,
Flume 1.X版本的統稱Flume-ng。
由于Flume-ng經過重大重構,與Flume-og有很大不同。
?
二、架構
Flume事件定義為具有字節有效負載和可選字符串屬性集的數據流單位。Flume代理是一個(JVM)進程,承載了組件,事件通過這些組件從外部源流到下一個目標(hop)。
Flume源使用由外部源(如Web服務器)傳遞給它的事件。外部源以目標Flume源可以識別的格式將事件發送到Flume。例如,Avro Flume源可用于從流中從Avro接收器發送事件的流中的Avro客戶端或其他Flume代理接收Avro事件。可以使用Thrift Flume源定義類似的流程,以接收來自Thrift Sink或Flume Thrift Rpc客戶端或以Flume Thrift協議生成的任何語言編寫的Thrift客戶端的事件.Flume源接收到事件后,會將其存儲到一個或多個渠道。該通道是一個被動存儲,用于保留事件,直到被Flume接收器消耗為止。文件通道就是一個示例–由本地文件系統支持。接收器從通道中刪除事件,并將其放入HDFS之類的外部存儲庫(通過Flume HDFS接收器),或將其轉發到流中下一個Flume代理(下一跳)的Flume源。給定代理中的源和接收器與通道中上演的事件異步運行。
(1)數據流模型
?
(2)復合流模型
Flume允許用戶建立多跳流程,其中事件在到達最終目的地之前會通過多個代理傳播。它還允許扇入和扇出流,上下文路由和備份路由(故障轉移)。
事件在每個代理上的一個通道中上演。然后將事件傳遞到流中的下一個代理或終端存儲庫(如HDFS)。僅將事件存儲在下一個代理程序的通道或終端存儲庫中之后,才將其從通道中刪除。這就是Flume中的單跳消息傳遞語義如何提供流的端到端可靠性的方式。
Flume使用事務性方法來確保事件的可靠傳遞。源和接收器分別在事務中封裝在通道提供的事務中放置或提供的事件的存儲/檢索。這確保了事件集在流中從點到點可靠地傳遞。在多跳流的情況下,來自上一跳的接收器和來自下一跳的源都運行其事務,以確保將數據安全地存儲在下一跳的通道中。
事件在通道中上演,該通道管理從故障中恢復。Flume支持持久的文件通道,該通道由本地文件系統支持。還有一個內存通道可以將事件簡單地存儲在內存隊列中,這樣速度更快,但是當代理進程死亡時,仍保留在內存通道中的任何事件都無法恢復。
?
三、核心組件
Flume Agent配置存儲在本地配置文件中。這是遵循Java屬性文件格式的文本文件。可以在同一配置文件中指定一個或多個Agent的配置。配置文件包括代理中每個Source,Sink和Channel的屬性,以及它們如何連接在一起以形成數據流。
流中的每個組件(Source,Sink或Channel)都有一個名稱,類型和特定于該類型和實例化的屬性集。例如,一個Avro源需要一個主機名(或IP地址)和一個端口號來接收數據。內存Channel可以具有最大隊列大小(“容量”),并且HDFS接收器需要知道文件系統URI,創建文件的路徑,文件旋轉的頻率(“ hdfs.rollInterval”)等。組件的所有此類屬性需要在托管Flume Agent的屬性文件中進行設置。
Agent需要知道要加載哪些單個組件以及如何連接它們才能構成流程。通過列出代理中每個Source,Sink和Channel的名稱,然后為每個Sink和Source指定連接Channel來完成此操作。例如,Agent通過稱為FileChannel的文件通道將事件從名為avroWeb的Avro Source流到HDFS Sink hdfs-cluster1。配置文件將包含這些組件的名稱和文件通道,作為avroWeb源和hdfs-cluster1 Sink的共享通道。
- Agent:使用JVM 運行Flume。每臺機器運行一個agent,但是可以在一個agent中包含多個sources和sinks。
Client:生產數據,運行在一個獨立的線程。 - Source:從Client專門用來收集數據,傳遞給Channel,可以處理各種類型、各種格式的日志數據,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定義。
- Sink:從Channel收集數據,運行在一個獨立線程,sink組件是用于把數據發送到目的地的組件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定義。
- Channel:連接 sources 和 sinks ,這個有點像一個隊列,source組件把數據收集來以后,臨時存放在channel中,即channel組件在agent中是專門用來存放臨時數據的——對采集到的數據進行簡單的緩存,可以存放在memory、jdbc、file等等。
- Events:可以是日志記錄、 avro 對象等。
?
?
?
總結
以上是生活随笔為你收集整理的Hadoop生态Flume(一)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive命令出现问题Failed wit
- 下一篇: 基尼系数是什么 基尼系数介绍