阿里大資料工程師教你怎樣理解Flume
lume是幹什麼的?
收集日誌的
flume如何蒐集日誌?
我們把flume比作情報人員
(1)蒐集資訊
(2)獲取記憶資訊
(3)傳遞報告間諜資訊
flume是怎麼完成上面三件事情的,三個元件:
source: 蒐集資訊
channel:傳遞資訊
sink:儲存資訊
flume OG(original generation初始版本)和NG(next generation,cdh4以及之後的版本)
Flume OG 程式碼工程臃腫、核心元件設計不合理、核心配置不標準等
Flume OG 有三種角色節點:agent、collector、master節點。
Flume NG 只有一種角色的節點:代理節點(agent),去掉了 collector、master 節點,這是核心元件最核心的變化。
agent 節點的組成也發生了變化,由 source、sink、channel 組成。
NG要求jdk1.6以上,而且只有linux上的啟動指令碼
OG版本已經不更新了
NG的核心元件:
source:完成對日誌資料的收集,分成transition和event打入到channel中。
source有多種實現包括AvroSource(監控埠)、NetCat Source、Syslog Source、Syslog TCP Source、Syslog UDP Source、Http Source、HDFS Source、Spooling Directory Source(對目錄下新增檔案的監控,並讀取檔案資料)、Exec Source(以執行linux命令的方式,持續輸出最新資料,如tail -F)等
flume可以和log4j配合使用
sink:取出channel中的資料,輸出到儲存檔案系統,資料庫,或遠端伺服器
多種實現方式如Avro sink、HDFS Sink、HBase Sink、Logger Sink(測試用,後臺列印)
小資料可以儲存在檔案或資料庫中,海量資料(每天GB、TB級別的資料)儲存到hadoop中
Channel:管道,提供一個佇列的功能,對source提供的資料進行簡單快取
實現由Memory/File/jdbc channel,Memory無法保證資料完成性,官方建議使用File Channel,保證資料完整性和一致性
Flow Pipeline
1、多個Agent順序連線
2、多個Agent的資料匯聚到同一個Agent
3、多路(一個agent上有多個channel)(Multiplexing)Agent
這種模式,有兩種方式,一種是用來複制(Replication),另一種是用來分流(Multiplexing)。Replication方式,可以將最前端的資料來源複製多份,分別傳遞到多個channel中,每個channel接收到的資料都是相同的;Multiplexing方式,selector可以根據header的值來確定資料傳遞到哪一個channel
4、實現load balance功能
5、實現failover功能
flume source
Avro Source:接收外部avro客戶端的事件
Thrift Source:接收外部thrift客戶端的事件
Exec Source:接收來自一個給定的Unix命令的標準輸出上的資料
Jms Source:接收來自訊息佇列的事件
NetCat Source:netcat在一端偵聽,每一行文字變成一個事件源
Spooling Directory Source:以目錄中檔案內容為事件源
SequenceGenerator Source:一個簡單地序列生成器,主要用於測試
Syslog Source:讀取syslog資料
SyslogUDP Source
SyslogTCP Source
Multiport Syslog TCP Source
Http Source:接收http post,get事件,get只用於試驗
Custom Source:自定義source
flume sink
HDFS Sink將事件寫入到hadoop分散式檔案系統HDFS
Logger sink 通常用於除錯、測試
Avro sink 可以批量傳送,可以配置批量大小
Thrift sink
IRC sink 從通道中取得資訊到irc server
File Roll sink儲存檔案到本地檔案系統中
Null sink丟棄從通道接收的所有事件
HBase sink將資料寫入到hbase中
AsyncHbase sink非同步方式將資料寫入到hbase中
Custom sink 自定義sink
flume channel
Memory channel 時間儲存在一個可配置的最大尺寸的記憶體中的佇列;速度快,吞吐量大,但是代理出現故障時資料丟失
JDBC channel 時間儲存在資料庫中
File channel 不同的file channel應該寫到不同的磁碟上,避免單磁碟io過大
Pseudo Thansaction channel 用於測試
Custom channel 自定義channel
flume channel selector
Replicating channel selector (default) 複製,相同的資料傳送到多個channel
Multiplexing channel selector 複用,以header區分一個event傳送到哪個channel
Custom channel selector 自定義channel selector
資料通訊系統或計算機網路系統中,傳輸媒體的頻寬或容量往往會大於傳輸單一訊號的需求,為了有效地利用通訊線路,希望一個通道同時傳輸多路訊號,這就是所謂的多路複用技術(Multiplexing)。採用多路複用技術能把多個訊號組合起來在一條物理通道上進行傳輸,在遠距離傳輸時可大大節省電纜的安裝和維護費用。
Flume sink processor
Default sink processor
Failover sink processor 故障轉移(主備)
Load balancing sink processor 負載均衡:輪詢round_robin或隨機random
flume interceptor
攔截器主要是對事件的header資訊資訊操作,要麼直接忽略他,要麼修改他的資料
一、Event Serializers
file_roll sink 和hdfs sink 都支援EventSerializer介面
Body TextSerializer,別名:text。這個攔截器將把事件的body部分寫入到輸出流中而不需要任何轉換或者修改。事件的header將直接被忽略。
Avro Event Serializer別名:avro_event。這個攔截器將把事件序列化到一個Avro容器檔案中。使用的模式和RPC Avro機制使用到的處理flume事件的機制一樣。這個序列化器繼承自AbstractAvroEventSerializer類。
二、Timestamp Interceptor
Flume 可以在事件傳輸過程中對它進行修改與刪除,而這個都是通過Interceptor進行實現的,實際都是往事件的header裡插資料。而Timestamp Interceptor攔截器就是可以往event的header中插入關鍵詞為timestamp的時間戳。
三、Host Interceptor
該攔截器可以往event的header中插入關鍵詞預設為host主機名或者ip地址(注意是agent執行的機器的主機名或者ip地址)
四、Static Interceptor
Static Interceptor攔截器允許使用者增加一個static的header併為所有的事件賦值。範圍是所有事件。
五、Regex FilteringInterceptor
Regex Filtering Interceptor攔截器用於過濾事件,篩選出與配置的正規表示式相匹配的事件。可以用於包含事件和排除事件(include 或者是exclude)。常用於資料清洗,通過正規表示式把資料過濾出來。
flume開發
1、RPC
flume雖然包含一些內部機制來採集資料,但是有時候使用者希望能將應用程式和flume直接相通。flume client是一個庫,允許應用程式連結flume和通過rpc往flume傳送資料。
avro是flume預設的rpc協議
2、Transaction
Flume 的核心是把資料從資料來源收集過來,再送到目的地。為了保證輸送一定成功,在送到目的地之前,會先快取資料,待資料真正到達目的地後,刪除自己快取的資料。
Flume 使用事務性的方式保證傳送Event整個過程的可靠性。Sink 必須在 Event 被存入 Channel 後,或者,已經被傳達到下一站agent裡,又或者,已經被存入外部資料目的地之後,才能把 Event 從 Channel 中 remove 掉。這樣資料流裡的 event 無論是在一個 agent 裡還是多個 agent 之間流轉,都能保證可靠,因為以上的事務保證了 event 會被成功儲存起來。而 Channel 的多種實現在可恢復性上有不同的保證。也保證了 event 不同程度的可靠性。比如 Flume 支援在本地儲存一份檔案 channel 作為備份,而memory channel 將 event 存在記憶體 queue 裡,速度快,但丟失的話無法恢復。
3、Source
4、Sink
最佳實踐
參考基於Flume的美團日誌收集系統(一)架構和設計,列出一些最佳實踐:
模組命名規則:所有的 Source 以 src 開頭,所有的 Channel 以 ch 開頭,所有的 Sink 以 sink 開頭;
模組之間內部通訊統一使用 Avro 介面;
將日誌採集系統系統分為三層:Agent 層,Collector 層和 Store 層,其中 Agent 層每個機器部署一個程式,負責對單機的日誌收集工作;Collector 層部署在中心伺服器上,負責接收Agent層傳送的日誌,並且將日誌根據路由規則寫到相應的 Store 層中;Store 層負責提供永久或者臨時的日誌儲存服務,或者將日誌流導向其它伺服器。
擴充套件 MemoryChannel 和 FileChannel ,提供 DualChannel 的實現,以提供高吞吐和大快取
監控 collector HdfsSink寫資料到 hdfs 的速度、FileChannel 中擁堵的 events 數量,以及寫 hdfs 狀態(檢視是否有 .tmp 檔案生成)
PS:
關注微信公眾號“程式設計師OfHome”,傳送“領取資料”可以免費領取視訊資料。
對大資料感興趣的朋友可以加入到我們的程式設計師OfHomeQQ群:610535338 群裡有都是從事或者在學習大資料的朋友,在此我也邀請你進群一起學習,群內沒有廣告,也是禁止打廣告的,大家也可以關注一下我的微信公共號“程式設計師OfHome”下方掃掃可關注。
相關文章
- 京東大資料工程師教你怎樣用Sqoop大資料工程師OOP
- 大資料初學者怎樣學習?Java工程師怎麼轉行大資料?大資料Java工程師
- 大資料工程師入門系列—常用資料採集工具(Flume、Logstash 和 Fluentd)大資料工程師
- 阿里巴巴資深大資料工程師:大資料處理實踐阿里大資料工程師
- 【就業】大資料開發、Hadoop開發工程師、資料探勘、演算法工程師各路人才薪資怎麼樣?就業大資料Hadoop工程師演算法
- 究竟,怎樣才能算是“資深”工程師?工程師
- 大資料之Flume(二)大資料
- Linux開發工程師怎麼樣?Linux工程師
- 阿里巴巴年薪800k大資料全棧工程師成長記阿里大資料全棧工程師
- 大資料4.1 - Flume整合案例+Hive資料倉大資料Hive
- 大資料3-Flume收集資料+落地HDFS大資料
- 大資料前景如何?大資料開發工程師是什麼?大資料工程師
- 好程式設計師大資料培訓分享Hadoop怎樣處理資料?程式設計師大資料Hadoop
- Web前端工程師怎麼樣呢?薪資待遇如何呢?Web前端工程師
- Flume 在有贊大資料的實踐大資料
- 大資料01-Flume 日誌收集大資料
- 大資料工程師-學習路線-轉大資料工程師
- 網易微專業大資料工程師大資料工程師
- 你想快速成為大資料工程師?大資料工程師
- 大資料如何學習,大資料工程師學習經驗分享大資料工程師
- 怎樣搭建大資料平臺大資料
- 好程式設計師大資料培訓分享怎樣進行大資料入門學習程式設計師大資料
- 學習Java前景怎麼樣?Java工程師工資高嗎?Java工程師
- 大資料工程師需要學習哪些技術?大資料工程師
- 如何成為一名大資料工程師?大資料工程師
- 大資料工程師需要掌握的知識點大資料工程師
- 怎樣如軟體工程師一樣組織知識軟體工程工程師
- 好程式設計師大資料學習路線之Logstach與flume對比程式設計師大資料
- 阿里大資料架構師教你ZooKeeper安裝配置!看了的都轉發和關注了!阿里大資料架構
- 大資料怎樣入門學習?大資料
- 年薪500萬大資料工程師:講解大資料建模方法和經驗大資料工程師
- 從BAT大資料工程師那裡總結的大資料學習方法BAT大資料工程師
- 怎樣成為優秀的後端工程師後端工程師
- 硬體工程師的發展前景怎麼樣?工程師
- 軟體測試工程師的待遇怎麼樣工程師
- 大資料基礎學習-5.Flume1.6.0大資料
- 大資料開發工程師需要掌握什麼技能?大資料工程師
- 學歷影響大資料工程師的收入嗎大資料工程師