1. 程式人生 > >Flume的簡介、原理與安裝

Flume的簡介、原理與安裝

1、前言

flume是由cloudera軟體公司產出的可分散式日誌收集系統,後與2009年被捐贈了apache軟體基金會,為hadoop相關元件之一。尤其近幾年隨著flume的不斷被完善以及升級版本的逐一推出,特別是flume-ng;同時flume內部的各種元件不斷豐富,使用者在開發的過程中使用的便利性得到很大的改善,現已成為apache top專案之一.

2、概述

2.1、什麼是Flume?

Apache Flume 是一個從可以收集例如日誌,事件等資料資源,並將這些數量龐大的資料從各項資料資源中集中起來儲存的工具/服務,或者數集中機制。flume具有高可用,分散式,配置工具,其設計的原理也是基於將資料流,如日誌資料從各種網站伺服器上彙集起來儲存到HDFS,HBase等集中儲存器中。其結構如下圖所示:

2.2、Flume特性

Flume是一個分散式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。

Flume可以採集檔案,socket資料包、檔案、資料夾、kafka等各種形式源資料,又可以將採集到的資料(下沉sink)輸出到HDFS、hbase、hive、kafka等眾多外部儲存系統中

一般的採集需求,通過對flume的簡單配置即可實現

Flume針對特殊場景也具備良好的自定義擴充套件能力,因此,flume可以適用於大部分的日常資料採集場景

3、Flume原理

3.1、Flume元件詳解

對於每一個Agent來說,它就是一共獨立的守護程序(JVM),它從客戶端接收資料,如下圖所示flume的基本模型

Flume分散式系統中最核心的角色是agent,flume採集系統就是由一個個agent所連線起來形成

每一個agent相當於一個數據(被封裝成Event物件)傳遞員,內部有三個元件:

Source:採集元件,用於跟資料來源對接,以獲取資料

Channel:傳輸通道元件,用於從source將資料傳遞到sink

Sink:下沉元件,用於往下一級agent傳遞資料或者往最終儲存系統傳遞資料

flume官網中對Event的定義:

一行文字內容會被反序列化成一個event(序列化是將物件狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料)

,event的最大定義為2048位元組,超過,則會切割,剩下的會被放到下一個event中,預設編碼是UTF-8。

3.2、Flume採集結構圖

3.2.1、簡單結構,單個agent採集資料

3.2.2、複雜結構,多級agent之間串聯

4、Flume實戰案例

4.1、Flume的安裝部署

Flume的安裝非常簡單,只需要解壓即可,當然,前提是已有hadoop環境,上傳安裝包到資料來源所在節點上

然後解壓  tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr/local/

然後進入flume的目錄,修改conf下的flume-env.sh,在裡面配置JAVA_HOME

mv flume-env.sh.template flume-env.sh

根據資料採集的需求配置採集方案,描述在配置檔案中(檔名可任意自定義)

新建一個名為myconf的資料夾,在裡面新建一個socket-console.conf檔案,寫自己的配置

[[email protected] apache-flume-1.7.0-bin]# mkdir myconf
[[email protected] apache-flume-1.7.0-bin]# touch socket-console.conf

[[email protected] myconf]# vim socket-console.conf

# 定義這個agent中各元件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 描述和配置source元件:r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# 描述和配置sink元件:k1
a1.sinks.k1.type = logger

# 描述和配置channel元件,此處使用是記憶體快取的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 描述和配置source  channel   sink之間的連線關係
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

指定採集方案配置檔案,在相應的節點上啟動flume agent

啟動agent去採集資料:

[[email protected] apache-flume-1.7.0-bin]# bin/flume-ng agent -c conf -f myconf/socket-console.conf -n a1 -Dflume.root.logger=INFO,console

-c conf   指定flume自身的配置檔案所在目錄

-f myconf/socket-console.conf  指定我們所描述的採集方案

-n a1  指定我們這個agent的名字

測試

先要往agent的source所監聽的埠上傳送資料,讓agent有資料可採

隨便在一個能跟agent節點聯網的機器上

telnet anget-hostname  port   (telnet localhost 44444)