1.Flume概念,功能,架構
阿新 • • 發佈:2018-11-06
1.Flume介紹
Flume是一種分散式、可靠且可用的服務,用於有效地收集、聚合和移動大量日誌資料。它是基於流資料的靈活架構。它具有高可靠性機制和許多故障轉移及恢復機制,具有強大的容錯能力。它使用簡單的可擴充套件資料模型,允許線上分析應用程式。
2.Flume架構
Flume-ng只有一個角色的節點:Agent角色。Agent角色有Source、Channel、Sink組成。
- Source:用於採集資料,Source是產生資料流的來源方,同時將產生的資料流傳輸到Channel。
- Channel:連線Sources和Sinks,這個管道類似與一個佇列。
- Sink:從Channels收集資料,將資料寫到目標源,可以是下一個Source也可以是HDFS或HBASE。
Event是Flume資料傳輸的基本單元,Flume以Event的形式將資料從源頭傳送到最終目的地。Event由(可選的)Header和載有資料的一個Byte Array組成。
- 載有的資料對Flume是不透明的
- Header是容納了key-value的無序集合,key在集合內是唯一的
- Header可以在上下文路由中擴充套件
3.Apache Flume安裝配置
# 0.需要的環境 # flume工作準備:(1)Java執行環境(2)記憶體(3)磁碟空間(4)目錄許可權 # 1.下載apache flume 1.7 https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.6.0/apache-flume-1.6.0-bin.tar.gz # 2.解壓 tar -zvf apache-flume-1.6.0-bin.tar.gz mv apache-flume-1.6.0-bin flume-1.6.0 # 3.配置JAVA_HOME cd flume-1.6.0/conf cp flume-env.sh.template flume-env.sh #修改JAVA_HOME # 4.啟動 bin/flume-ng agent \ #agent -n agent-01 \ #指定名稱 -c conf \ #指定配置檔案目錄 -f conf/flume-conf.properties.template #指定配置檔案
4.編寫第一個Flume Agent(實時讀取資料)
#1.新建a1.conf touch conf/a1.conf #2.編寫a1.conf #agent a1.sources = r1 a1.channels = c1 a1.sinks = k1 #source a1.sources.r1.type=netcat a1.sources.r1.bind=master a1.sources.r1.port=55555 #channel a1.channels.c1.type=memory a1.channels.c1.capacity=1000 a1.channels.c1.transactionCapacity=100 #sink a1.sinks.k1.type=logger #bind a1.sources.r1.channels=c1 a1.sinks.k1.channel=c1
執行啟動flume命令:
bin/flume-ng agent -c conf -n agent-a1 -f conf/a1.conf \
-Dflume.root.logger=DEBUG,console #因為預設配置輸出日誌到檔案,我們需要它輸出到控制檯可見。
安裝並啟動telnet:
# 1.安裝telnet-server
yum -y install telnet-server
# 2.開啟服務
service xinetd start
# 3.開啟埠55555
telnet master 55555
5.編寫第二個Flume Agent(收集日誌,儲存到HDFS)
a2.sources = r2
a2.sinks = k2
a2.channels = c2
a2.sources.r2.type = exec
a2.sources.r2.command = tail -f /var/log/my.log # mysql本地日誌
a2.sources.r2.shell = /bin/bash -c
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://master:8020/mysql_r2/ #hdfs目錄
a2.sinks.k2.hdfs.fileType = DataStream
a2.sinks.k2.hdfs.writeFormat = Text
a2.sinks.k2.hdfs.batchSize = 5
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
啟動flume:
bin/flume-ng agent -c conf -n a2 -f conf/a2.conf -Dflume.root.logger=DEBUG,console
檢視收集結果:
[[email protected] ~]# hdfs dfs -ls /mysql_r2
Found 14 items
-rw-r--r-- 3 root root 338 2018-10-26 15:30 /mysql_r2/FlumeData.1540538984894
-rw-r--r-- 3 root root 7 2018-10-26 15:36 /mysql_r2/FlumeData.1540539367248
-rw-r--r-- 3 root root 70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409803
-rw-r--r-- 3 root root 70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409804
-rw-r--r-- 3 root root 70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409805
-rw-r--r-- 3 root root 56 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409806
-rw-r--r-- 3 root root 70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539468662
-rw-r--r-- 3 root root 70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539468663
-rw-r--r-- 3 root root 70 2018-10-26 15:38 /mysql_r2/FlumeData.1540539468664
-rw-r--r-- 3 root root 42 2018-10-26 15:38 /mysql_r2/FlumeData.1540539468665
-rw-r--r-- 3 root root 70 2018-10-26 15:39 /mysql_r2/FlumeData.1540539553306
-rw-r--r-- 3 root root 28 2018-10-26 15:39 /mysql_r2/FlumeData.1540539553307
-rw-r--r-- 3 root root 7 2018-10-26 15:40 /mysql_r2/FlumeData.1540539600840
-rw-r--r-- 3 root root 35 2018-10-26 15:44 /mysql_r2/FlumeData.1540539884180.tmp
6.編寫第三個Flume Agent(實時收集日誌,按時間分目錄儲存到HDFS)
a3.sources = r3
a3.sinks = k3
a3.channels = c3
a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir= /var/log/my.log # mysql本地日誌
a3.sources.r3.ignorePattern = ^(.)*\\.log$ #不收集log結尾的
a3.sources.r3.fileSuffix = .delete #收集完之後檔名以.delete結尾
a3.sources.r3.useLocalTimeStamp = true #使用本地日期
a3.channels.c3.type = file
a3.channels.c3.checkpointDir = /mnt/flume/checkpoint
a3.channels.c3.dataDirs = /mnt/flume/data
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://master:8020/spool/logs/%Y%m%d #hdfs目錄(日期變動的目錄)
a3.sinks.k3.hdfs.fileType = DataStream
a3.sinks.k3.hdfs.writeFormat = Text
a3.sinks.k3.hdfs.batchSize = 5
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3
啟動flume:
bin/flume-ng agent -c conf -n a3 -f conf/a3.conf -Dflume.root.logger=DEBUG,console
檢視收集結果:
[[email protected] ~]# hdfs dfs -ls /spool/logs/
Found 14 items
-rw-r--r-- 3 root root 0 2018-10-26 15:30 /spool/logs/20181025
-rw-r--r-- 3 root root 0 2018-10-26 15:36 /spool/logs/20181026