大數據系列——Flume入門和認識

1. Flume簡介

  • Flume是一個分佈式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統
  • 支持在日誌系統中定製各種數據發送方,用於收集數據
  • Flume提供對數據進行簡單處理,並寫到各類數據接收方

2. Flume OG 與Flume NG

Flume OG:Flume original generation,即Flume0.9x版本linux

Flume NG:Flume next generation,即Flume1.x版本shell

3. Flume體系結構

flume的事件(agent)apache

Source: 用來定義採集系統的源頭安全

Channel: 把Source採集到的日誌進行傳輸,處理網絡

Sink:定義數據的目的地分佈式

4. Flume的安裝

  • 準備安裝文件日誌

    • apache-flume-1.6.0-bin.tar.gz
  • 解壓code

    • tar -zxvf apache-flume-1.6.0-bin.tar.gz -C /opt/
  • 重命名事件

    • mv apache-flume-1.6.0-bin flume
  • 添加環境變量事務

    #配置Flume的環境變量
    export FLUME_HOME=/opt/flume
    export PATH=$PATH:$FLUME_HOME/bin
  • 配置文件

    [root@uplooking01 /opt/flume/conf]
        mv flume-env.sh.template flume-env.sh
    [root@uplooking01 /opt/flume/conf/flume-env.sh]
        export JAVA_HOME=/opt/jdk

5. Flume採集網絡端口數據

5.1 定義flume的事件配置文件

flume-nc.properties

# flume-nc.conf: 用於監聽網絡數據的flume agent實例的配置文件
############################################
# 對各個組件的描述說明
# 其中a1爲agent的名字
# r1是a1的source的代號名字
# c1是a1的channel的代號名字
# k1是a1的sink的代號名字
############################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 用於描述source的,類型是netcat網絡
a1.sources.r1.type = netcat
# source監聽的網絡ip地址和端口號
a1.sources.r1.bind = uplooking01
a1.sources.r1.port = 44444

# 用於描述sink,類型是日誌格式
a1.sinks.k1.type = logger


# 用於描述channel,在內存中作數據的臨時的存儲
a1.channels.c1.type = memory
# 該內存中最大的存儲容量,1000個events事件
a1.channels.c1.capacity = 1000
# 可以同時對100個events事件監管事務
a1.channels.c1.transactionCapacity = 100

# 將a1中的各個組件創建關聯關係,將source和sink都指向了同一個channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 啓動agent(flume事件)

    flume-ng agent --name a1 --conf /opt/flume/conf --conf-file /opt/flume/conf/flume-nc.properties -Dflume.root.logger=INFO,console

  • 啓動agent(flume事件) ,簡單化

    flume-ng agent --name a1 --conf-file /opt/flume/conf/flume-nc.properties

6. 安裝nc(瑞士軍刀)

rpm -ivh nc-1.84-22.el6.x86_64.rpm

監聽端口: nc -lk 4444

鏈接主機的端口: nc host port

7. 查看文件的命令

cat xxx: 查看文件的所有內容

head -100 xxx:查看文件內容開始的100行(默認不加-100是查看10行)

tail -100 xxx:查看文件內容末尾的100行(默認不加-100是查看10行)

tail -f xxx:查看文件內容末尾10行,而且監聽文件的變化

8. Flume基本的組件

8.1 Source

  • 從外界採集各類類型的數據,將數據傳遞給Channel
  • 常見採集的數據類型

    • NetCat Source
    • Spooling Directory Source }
    • Exec Source
    • Kafka Source (後面說)
    • HTTP Source

8.2 Channel

  • 一個數據的存儲池,中間通道
  • 接受source傳出的數據,向sink指定的目的地傳輸。Channel中的數據直到進入到下一個channel中或者進入終端纔會被刪除。當sink寫入失敗後,能夠自動重寫,不會形成數據丟失,所以很可靠
  • channel的類型 :

    • Memory Channel (經常使用) 使用內存做爲數據的存儲。速度快
    • File Channel 使用文件來做爲數據的存儲。安全可靠
    • Spillable Memory Channel 用內存和文件做爲數據的存儲,即:先存在內存中,若是內存中數據達到閥值則flush到文件中
    • JDBC Channel 使用jdbc數據源來做爲數據的存儲。
    • Kafka Channel 使用kafka服務來做爲數據的存儲

8.3 Sink

  • 數據的最終的目的地
  • 接受channel寫入的數據以指定的形式表現出來(或存儲或展現)。

    sink的表現形式不少好比:打印到控制檯、hdfs上、avro服務中、文件中等

  • 常見採集的數據類型

    • HDFS Sink
    • Hive Sink
    • Logger Sink
    • Avro Sink
    • HBaseSink
    • File Roll Sink

8.4 Event

event是Flume NG傳輸的數據的基本單位,也是事務的基本單位

在文本文件,一般是一行記錄就是一個event。

網絡消息傳輸系統中,一條消息就是一個event。

event裏有header、body

Event裏面的header類型:Map<String, String>

咱們能夠在source中自定義header的key:value,在某些channel和sink中使用header

9. Flume監聽命令的執行結果

配置agent

############################################
# 對各個組件的描述說明
# 其中a1爲agent的名字
# r1是a1的source的代號名字
# c1是a1的channel的代號名字
# k1是a1的sink的代號名字
############################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 用於描述source的,類型是linux命令
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F  /opt/flume/conf/logs/test01.txt

# 用於描述sink,類型是日誌格式
a1.sinks.k1.type = logger

# 用於描述channel,在內存中作數據的臨時的存儲
a1.channels.c1.type = memory
# 該內存中最大的存儲容量,1000個events事件
a1.channels.c1.capacity = 1000
# 可以同時對100個events事件監管事務
a1.channels.c1.transactionCapacity = 100

# 將a1中的各個組件創建關聯關係,將source和sink都指向了同一個channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

運行agent,開始採集數據

flume-ng agent --name a1 --conf-file flume-exec.properties

10. 採集目錄中新增文件的數據

配置agent

############################################
# 對各個組件的描述說明
# 其中a1爲agent的名字
# r1是a1的source的代號名字
# c1是a1的channel的代號名字
# k1是a1的sink的代號名字
############################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 用於描述source的,監聽的是一個目錄
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /opt/flume/conf/logs/aa
a1.sources.r1.fileSuffix = .OK
a1.sources.r1.deletePolicy = never
a1.sources.r1.fileHeader = true

# 用於描述sink,類型是日誌格式
a1.sinks.k1.type = logger

# 用於描述channel,在內存中作數據的臨時的存儲
a1.channels.c1.type = memory
# 該內存中最大的存儲容量,1000個events事件
a1.channels.c1.capacity = 1000
# 可以同時對100個events事件監管事務
a1.channels.c1.transactionCapacity = 100

# 將a1中的各個組件創建關聯關係,將source和sink都指向了同一個channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

運行agent,開始採集數據

flume-ng agent --name a1 --conf-file flume-dir.properties

11. 後臺運行flume

nohup flume-ng agent --name a1 --conf-file flume-dir.properties >dev/null 2>&1 &

相關文章
相關標籤/搜索