標籤:上下文 託管 flume htm 安裝 沒有 1.4 rpc rsh
轉載請註明原文出處:http://www.cnblogs.com/lighten/p/6830439.html
1.簡介
該文主要是翻譯官方的相關文檔,源地址點擊這裡。介紹一下Flume的一些基本知識和搭建方法。
Apache Flume是一種分布式,可靠和可用的系統,用於高效收集,彙總和將許多不同的來源的大量日誌資料移動到集中式資料存放區。
Apache Flume的使用不僅限於日誌資料彙總。 由於資料來源是可定製的,因此可以使用Flume來傳輸大量事件數目據,包括但不限於網路流量資料,社交媒體產生資料,電子郵件訊息以及幾乎任何資料來源。
目前有兩個版本的程式碼可用,0.9.x和1.x版本。“Flume 0.9.x使用者指南”提供0.9.x跟蹤的文檔。本文檔適用於1.4.x蹤跡。
鼓勵新使用者和現有使用者使用1.x版本,以便利用最新架構中提供的效能改進和配置靈活性。
2.環境要求
Java運行時環境 - Java 1.7或更高版本
記憶體 -sources, channels 或 sinks使用,需配置足夠的記憶體
磁碟空間 - 用於channels 或sinks使用的配置的足夠的磁碟空間
目錄許可權 - agent使用的目錄的讀/寫入權限
3.資料流模型
Flume事件被定義為資料流單元,其包含有效載荷位元組和可選的一組字串屬性。Flume代理是一個(JVM)進程,它管理組件的事件流從外部源傳遞到下一個目標。
Flume源消耗由外部源(如Web伺服器)傳遞給它的事件。外部源用特定的可以被目標Flume識別的格式發送給Flume。例如,一個Avro Flume源可以被用於接收來自Avro用戶端或者是其它流中發送來自Avro sink事件的Flume代理的Avro事件。類似的流可以被定義使用一個Thrift Flume Source來接收來自Thrift Sink或Flume Thrift Rpc用戶端,或者使用來自Flume thrift協議產生的任何語言編寫的Thrift用戶端的事件。當Flume源接收到一個事件時,它將其儲存到一個或多個通道中。 該通道是一個被動儲存,保持事件,直到它被Flume sink消耗。 檔案通道是一個例子 - 它由本地檔案系統支援。 接收器從通道中刪除事件,並將其放入外部存放庫(如HDFS(通過Flume HDFS sink)),或將其轉寄到流中下一個Flume代理(下一跳)的Flume源。 給定代理中的源和接收器與通道中分段的事件非同步運行。
Flume允許使用者建立多hop流,其中事件在到達最終目的地之前穿過多個代理。 它還允許為失敗的hops提供fan-in和fan-out流,上下文路由和備份路由(故障切換)。
事件在每個代理的頻道上進行。 然後將事件傳遞到流中的下一個代理或終端存放庫(如HDFS)。 事件只有在儲存在下一個代理的通道或終端存放庫中之後才從通道中刪除。 這是Flume中單跳訊息傳遞語義如何提供流的端到端可靠性。
Flume採用transactional方式來保證事件的可靠傳遞。 source和sink分別在事務中封裝儲存/檢索,由通道提供的事務來放置或提供事件。 這確保了事件集可以在流程中從點到點可靠地傳遞。 在多hop流程的情況下,來自上一hop的匯聚和來自下一跳的源都具有其事務運行,以確保資料被安全地儲存在下一跳的通道中。
這些事件是在通道中進行的,它管理從故障中恢複。 Flume支援由本地檔案系統支援的持久檔案通道。 還有一個記憶體通道,它將事件簡單地儲存在記憶體中的隊列中,速度更快,但當代理進程死機時仍然保留在記憶體通道中的任何事件都無法恢複。
4.下載
點擊這裡,下載二進位包,解壓安裝包,目錄結構如下:
官方文檔地址:這裡。維基:這裡。
5.配置
Flume代理配置儲存在本地設定檔中。 這是一個遵循Java屬性檔案格式的文字檔。 可以在同一設定檔中指定一個或多個代理的配置。 設定檔包括代理中每個源,宿和通道的屬性,以及它們如何串連在一起以形成資料流。
流中的每個組件(源,宿或通道)具有特定類型和執行個體化的名稱,類型和屬性集。 例如,Avro源需要一個主機名稱(或IP地址)和一個連接埠號碼來接收資料。 記憶體通道可以具有最大隊列大小(“容量”),並且HDFS接收器需要知道檔案系統URI,建立檔案的路徑,檔案輪換的頻率(“hdfs.rollInterval”)等。組件的所有這些屬性 需要在託管Flume代理的屬性檔案中設定。
代理需要知道要載入的單個組件以及它們如何串連以構成流。 這是通過列出代理中每個源,接收器和通道的名稱,然後為每個接收器和源指定串連通道來完成的。 例如,代理程式通過稱為檔案通道的檔案通道將來自Avro源的Avro源的事件流經HDFS sink hdfs-cluster1。 設定檔將包含這些組件的名稱和檔案通道作為avroWeb源和hdfs-cluster1 sink的共用通道。
開啟一個代理:代理開啟是通過使用一個shell指令碼稱為flume-ng,其位於Flume的bin目錄下。你需要指定代理的名稱,配置目錄和設定檔,通過以下命令進行:
$ bin/flume-ng agent –n $agent_name –c conf –f conf/flume-conf.properties.template
在這裡,我們給出一個樣本設定檔,描述單節點Flume部署。 此配置允許使用者建置事件,然後將其記錄到控制台。
此配置定義了名為a1的單個代理。 a1有一個源,用於監聽連接埠44444上的資料,緩衝區記憶體中的事件數目據的通道和將事件數目據記錄到控制台的接收器。 設定檔命名各種組件,然後介紹其類型和配置參數。 給定的設定檔可以定義幾個命名的代理; 當一個給定的Flume進程被啟動時,一個標誌被傳遞,告訴它哪個命名的代理顯示。
給定這個設定檔,我們可以啟動Flume,如下所示:
$ bin/flume-ng agent –conf conf –conf-file example.conf –name a1 –Dflume.root.logger=INFO,console
我是在windows上進行操作的,下面給出windows的相關處理方法:
Windows下,flume高版本整合了powershell,基礎的flume設定檔不變,但是要在控制台輸出相關的日誌資訊,還需要將conf檔案夾下的flume-env.ps1.template重新命名為flume-env.ps1,在裡面添加如下:
然後再執行下面的命令:
bin> flume-ng.cmd agent -conf ../conf -conf-file ../conf/flume-conf.properties -name a1
使用flume-ng.cmd help查看在windows下的用法:
請注意,在完全部署中,我們通常會再包含一個選項:--conf = <conf-dir>。 <conf-dir>目錄將包含shell指令碼flume-env.sh和潛在的log4j屬性檔案。 在這個例子中,我們傳遞一個Java選項來強制Flume登入到控制台,而沒有一個自訂的環境指令碼。
從另一個單獨的終端,我們可以telnet連接埠44444並發送Flume一個事件:
在之前的Flume的終端就可以看見:
這樣就完成了簡單的配置了。
6.後記
這篇文章主要是講解一下flume的基礎知識和搭建,後續可能會更進一步補充相關知識。
Flume搭建及學習(基礎篇)