1. 程式人生 > >flume安裝與監控部署

flume安裝與監控部署

Flume概述

1)官網地址
http://flume.apache.org/

2)日誌採集工具

Flume是一種分散式,可靠且可用的服務,用於有效地收集,聚合和移動大量日誌資料。它具有基於
流資料流的簡單靈活的架構。它具有可靠的可靠性機制和許多故障轉移和恢復機制,具有強大的容錯
能力。它使用簡單的可擴充套件資料模型,允許線上分析應用程式。

3)為什麼需要flume

資料從哪裡來?
-》爬蟲
-》日誌資料 flume
-》傳統型資料庫 sqoop

4)flume架構

source:資料來源
產生資料流,同時source將產生的資料流傳輸到channel

channel:傳輸通道
用於橋接Source和sinks

sinks:下沉(資料池)
從channel收集資料

event:傳輸單元
Flume資料傳傳輸的基本單元,以事件的形式將資料送往目的地。

Flume安裝部署

1)下載安裝包
http://archive.apache.org/dist/flume/1.6.0/

2)上傳到linux
alt+p

3)解壓
tar -zxvf .tar

4)重新命名
mv flume-env.sh.template flume-env.sh

5)修改配置檔案
export JAVA_HOME=/opt/java/jdk1.8.0_141

場景一:使用Flume監聽一個埠

1)安裝telnet
yum search telnet
yum intsall telnet.x86_64

2)寫配置檔案
flumejob_telnet.conf

3)啟動
bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/flumejob_telne
t.conf -Dflume.root.logger=INFO,console
(-Dflume.root.logger=INFO.console將監聽的日誌資訊直接輸出到控制檯上)
4)傳送資料
telnet localhost 44444

5)檢視

flumejob_telnet.conf:

#smple.conf: A single-node Flume configuration

# Name the components on this agent 定義變數方便呼叫 加s可以有多個此角色
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source 描述source角色 進行內容定製
# 此配置屬於tcp source 必須是netcat型別
a1.sources.r1.type = netcat 
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink 輸出日誌檔案
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory(file) 使用記憶體 總大小1000 每次傳輸100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel 一個source可以繫結多個channel 
# 一個sinks可以只能繫結一個channel  使用的是圖二的模型
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

場景二:用Flume實時的採集檔案到HDFS

hive:
啟動
bin/flume-ng agent --conf conf/ --name a1 --confile conf/flumejob_hdfs.co
nf

配置資訊
flumejob_hdfs.conf :

# Name the components on this agent 
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source 
# exec 執行一個命令的方式去檢視檔案 tail -F 實時檢視
a1.sources.r1.type = exec
# 要執行的指令碼command tail -F 預設10行 man tail  檢視幫助
a1.sources.r1.command = tail -F /tmp/root/hive.log
# 執行這個command使用的是哪個指令碼 -c 指定使用什麼命令
# whereis bash
# bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz 
a1.sources.r1.shell = /usr/bin/bash -c

# Describe the sink 
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://master:9000/flume/%Y%m%d/%H
#上傳檔案的字首
a1.sinks.k1.hdfs.filePrefix = logs-
#是否按照時間滾動資料夾
a1.sinks.k1.hdfs.round = true
#多少時間單位建立一個新的資料夾  秒 (預設30s)
a1.sinks.k1.hdfs.roundValue = 1
#重新定義時間單位(每小時滾動一個資料夾)
a1.sinks.k1.hdfs.roundUnit = minute
#是否使用本地時間戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#積攢多少個 Event 才 flush 到 HDFS 一次
a1.sinks.k1.hdfs.batchSize = 500
#設定檔案型別,可支援壓縮
a1.sinks.k1.hdfs.fileType = DataStream
#多久生成一個新的檔案 秒
a1.sinks.k1.hdfs.rollInterval = 30
#設定每個檔案的滾動大小 位元組(最好128M)
a1.sinks.k1.hdfs.rollSize = 134217700
#檔案的滾動與 Event 數量無關
a1.sinks.k1.hdfs.rollCount = 0
#最小冗餘數(備份數 生成滾動功能則生效roll hadoop本身有此功能 無需配置) 1份 不冗餘
a1.sinks.k1.hdfs.minBlockReplicas = 1

# Use a channel which buffers events in memory 
a1.channels.c1.type = memory 
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

場景三:實時監聽資料夾

bin/flume-ng agent --conf conf/ --name a1 --confile conf/flumejob_dir.con
f

flumejob_dir.conf :

# 定義
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = spooldir
# 監控的資料夾
a1.sources.r1.spoolDir = /root/spooldir
# 上傳成功後顯示字尾名 
a1.sources.r1.fileSuffix = .COMPLETED
# 如論如何 加絕對路徑的檔名 預設false
a1.sources.r1.fileHeader = true

#忽略所有以.tmp 結尾的檔案(正在被寫入),不上傳
# ^以任何開頭 出現無限次 以.tmp結尾的
a1.sources.r1.ignorePattern = ([^ ]*\.tmp)

# Describe the sink 
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://master:9000/flume/spooldir/%Y%m%d/%H
#上傳檔案的字首
a1.sinks.k1.hdfs.filePrefix = spooldir-
#是否按照時間滾動資料夾
a1.sinks.k1.hdfs.round = true
#多少時間單位建立一個新的資料夾
a1.sinks.k1.hdfs.roundValue = 1
#重新定義時間單位
a1.sinks.k1.hdfs.roundUnit = hour
#是否使用本地時間戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#積攢多少個 Event 才 flush 到 HDFS 一次
a1.sinks.k1.hdfs.batchSize = 50

#設定檔案型別,可支援壓縮
a1.sinks.k1.hdfs.fileType = DataStream
#多久生成一個新的檔案
a1.sinks.k1.hdfs.rollInterval = 600
#設定每個檔案的滾動大小大概是 128M 
a1.sinks.k1.hdfs.rollSize = 134217700
#檔案的滾動與 Event 數量無關
a1.sinks.k1.hdfs.rollCount = 0
#最小副本數
a1.sinks.k1.hdfs.minBlockReplicas = 1

# Use a channel which buffers events in memory 
a1.channels.c1.type = memory 
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1