Flume(二)
目錄
案例一:監控端口數據
目標:Flume監控一端Console,另一端Console發送消息,使被監控端實時顯示。
(1)安裝telnet工具
yum -y install telnet
(2)創建Flume Agent配置文件,我們可以在/opt/module/apache-flume-1.8.0-bin/路徑下創建myconf文件夾,在該文件夾下新建我們的配置文件flume-telnet.conf(注意後綴名必須是conf)。
#定義agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#定義netcatsource,netcat端口源
a1.sources.r1.type = netcat
a1.sources.r1.bind = bigdata111
a1.sources.r1.port = 44445
# 定義sink
a1.sinks.k1.type = logger
# 定義channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 雙向鏈接
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
(3)判斷44445端口是否被佔用
netstat -nultp | grep 44445
(4)啓動flume配置文件
這裏有兩種命令方式,但效果都是一樣的。
方式1看起來更清楚
--conf:指定默認的配置文件
--name:主機名字
--conf-file:使用的默認文件
--Dflume.root.logger:日誌打印方式
flume-ng agent \
--conf /opt/module/apache-flume-1.8.0-bin/conf/ \
--name a1 \
--conf-file /opt/module/apache-flume-1.8.0-bin/myconf/flume-telnet.conf \
-Dflume.root.logger==INFO,console
方式2會更簡單一些
flume-ng agent --conf conf/ --name a1 --conf-file myconf/flume-telnet.conf -Dflume.root.logger==INFO,console
這裏採取方式一的方式進行啓動。
啓動之後,我們會發現命令行變成了一個懸停狀態,說明flume啓動成功。
(5)通過telnet發送信息進行測試
測試成功
案例二:實時讀取本地文件到HDFS
案例1是監控端口數據,我們也可以監控文件數據,並且將日誌信息寫入HDFS。
(1)創建flume-hdfs.conf文件,並且寫入配置信息。
# 1 agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2
# 2 source
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /opt/stephenyou
a2.sources.r2.shell = /bin/bash -c
# 3 sink
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://bigdata111:9000/flume/%Y%m%d/%H
#上傳文件的前綴
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照時間滾動文件夾
a2.sinks.k2.hdfs.round = true
#多少時間單位創建一個新的文件夾
a2.sinks.k2.hdfs.roundValue = 1
#重新定義時間單位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地時間戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#積攢多少個Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 1000
#設置文件類型,可支持壓縮
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一個新的文件
a2.sinks.k2.hdfs.rollInterval = 600
#設置每個文件的滾動大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件的滾動與Event數量無關
a2.sinks.k2.hdfs.rollCount = 0
#最小副本數
a2.sinks.k2.hdfs.minBlockReplicas = 1
# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 1000
# Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
(2)執行監控配置
[root@bigdata111 apache-flume-1.8.0-bin]# flume-ng agent --conf conf/ --name a2 --conf-file myconf/flume-hdfs.conf
我們可以看見hdfs上生成了一個flume目錄,並且以日期命名的文件夾。
案例三:實時讀取目錄文件到HDFS
實時監控特定目錄,並將數據信息存儲到HDFS。
(1)編寫配置文件flume-dir.conf
#1 Agent
a3.sources = r3
a3.sinks = k3
a3.channels = c3
#2 source
#監控目錄的類型
a3.sources.r3.type = spooldir
#監控目錄的路徑
a3.sources.r3.spoolDir = /opt/stephenyou
#哪個文件上傳hdfs,然後給這個文件添加一個後綴
a3.sources.r3.fileSuffix = .COMPLETED
a3.sources.r3.fileHeader = true
#忽略所有以.tmp結尾的文件,不上傳(可選)
a3.sources.r3.ignorePattern = ([^ ]*\.tmp)
# 3 sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://bigdata111:9000/flume/%H
#上傳文件的前綴
a3.sinks.k3.hdfs.filePrefix = upload-
#是否按照時間滾動文件夾
a3.sinks.k3.hdfs.round = true
#多少時間單位創建一個新的文件夾
a3.sinks.k3.hdfs.roundValue = 1
#重新定義時間單位
a3.sinks.k3.hdfs.roundUnit = hour
#是否使用本地時間戳
a3.sinks.k3.hdfs.useLocalTimeStamp = true
#積攢多少個Event才flush到HDFS一次
a3.sinks.k3.hdfs.batchSize = 100
#設置文件類型,可支持壓縮
a3.sinks.k3.hdfs.fileType = DataStream
#多久生成一個新的文件
a3.sinks.k3.hdfs.rollInterval = 600
#設置每個文件的滾動大小大概是128M
a3.sinks.k3.hdfs.rollSize = 134217700
#文件的滾動與Event數量無關
a3.sinks.k3.hdfs.rollCount = 0
#最小副本數
a3.sinks.k3.hdfs.minBlockReplicas = 1
# Use a channel which buffers events in memory
a3.channels.c3.type = memory
a3.channels.c3.capacity = 1000
a3.channels.c3.transactionCapacity = 100
# Bind the source and sink to the channel
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3
(2)啓動配置文件
[root@bigdata111 apache-flume-1.8.0-bin]# flume-ng agent --conf conf/ --name a3 --conf-file myconf/flume-dir.conf
展示: