CentOS7環境下搭建flume

一、flume安裝與配置
1.將flume解壓到指定目錄/home/jason/bigdata下:
[root@clsserv202 bigdata]# pwd
/home/jason/bigdata
[root@clsserv202 bigdata]# ll
總用量 4
drwxrwxrwx. 8 root root 4096 9月 8 14:38 flume-1.6.0

2.將flume的目錄添加到環境變量
export FLUME_HOME=/home/jason/bigdata/flume-1.6.0

1.從指定端口號讀取數據到Kafka中
1.1、首先指定本flume的Source、Channel、Sink的名稱
agent_ps.sources = idg-src
agent_ps.sinks = idg-sk
agent_ps.channels = idg-ch
1.2、下面再對Source、Channel、Sink進行詳細配置:
(1)配置源的各項配置爲:
agent_ps.sources.idg-src.type = avro
agent_ps.sources.idg-src.bind = 11.12.112.215
agent_ps.sources.idg-src.port = 44440
agent_ps.sources.idg-src.threads = 5
agent_ps.sources.idg-src.channels = idg-ch
【注意】
type爲avro,表示從本機指定的IP和端口接收數據;
channels 指定本Source對應的Channel的名稱,這裏的channels也表示一個Source可以對應多個Channel;
(2)channel預估一下日誌手機的速度以及本機的性能進行分配,這裏用的是:
agent_ps.channels.idg-ch.type = memory
agent_ps.channels.idg-ch.keep-alive = 60
agent_ps.channels.idg-ch.capacity = 500
agent_ps.channels.idg-ch.transactionCapacity = 100
(3)Sink配置爲數據即將輸出的Kafka的信息:
agent_ps.sinks.idg-sk.channel = idg-ch
agent_ps.sinks.idg-sk.type = org.apache.flume.sink.kafka.KafkaSink
agent_ps.sinks.idg-sk.topic = flume_log
agent_ps.sinks.idg-sk.brokerList = 11.12.112.206:9092,11.12.112.207:9092,11.12.112.208:9092
agent_ps.sinks.idg-sk.requireAcks = 0
agent_ps.sinks.idg-sk.batchSize = 20
【注意】
type中指定的Kafka的包名
brokerList中指定了Kafka集羣的地址;
channel 指定本Sink對應的Channel的名稱,這裏的channels表示一個Sink的來源只能對應一個Channel
(4)綜合上述的說明,實例配置文件中的數據爲:
# list the sources, sinks and channels for the agent
agent_ps.sources = idg-src
agent_ps.sinks = idg-sk
agent_ps.channels = idg-ch

agent_ps.sources.idg-src.type = avro
agent_ps.sources.idg-src.bind = 11.12.112.215
agent_ps.sources.idg-src.port = 44440
agent_ps.sources.idg-src.threads = 5
agent_ps.sources.idg-src.channels = idg-ch

agent_ps.channels.idg-ch.type = memory
agent_ps.channels.idg-ch.keep-alive = 60
agent_ps.channels.idg-ch.capacity = 500
agent_ps.channels.idg-ch.transactionCapacity = 100

agent_ps.sinks.idg-sk.channel = idg-ch
agent_ps.sinks.idg-sk.type = org.apache.flume.sink.kafka.KafkaSink
agent_ps.sinks.idg-sk.topic = flume_log
agent_ps.sinks.idg-sk.brokerList = 11.12.112.206:9092,11.12.112.207:9092,11.12.112.208:9092
agent_ps.sinks.idg-sk.requireAcks = 0
agent_ps.sinks.idg-sk.batchSize = 20

2.從本地的日誌文件中讀取數據到Kafka中
與1相比只需要修改Source的配置,將其從本地的某個端口讀取修改爲從指定的文件中讀取;
agent_ps.sources.idg-src.type = exec
agent_ps.sources.idg-src.shell = /bin/sh -c
agent_ps.sources.idg-src.command = tail -F /home/logs/idGen/idGen.log
agent_ps.sources.idg-src.restartThrottle = 2000
agent_ps.sources.idg-src.restart = true
agent_ps.sources.idg-src.batchSize = 20
agent_ps.sources.idg-src.channels = idg-ch
其他的Channel和Sink的配置與1一致;

3.從本地日誌文件中讀取數據到另一個flume中
與2相比,只需要修改Sink,見下面的紅色部分:
# list sources, sinks and channels in the agent
agent_ps.sources = idg-src
agent_ps.sinks = idg-sk
agent_ps.channels = idg-ch

agent_ps.sources.idg-src.type = exec
agent_ps.sources.idg-src.shell = /bin/sh -c
agent_ps.sources.idg-src.command = tail -F /home/logs/idGen/idGen.log
agent_ps.sources.idg-src.restartThrottle = 2000
agent_ps.sources.idg-src.restart = true
agent_ps.sources.idg-src.batchSize = 20
agent_ps.sources.idg-src.channels = idg-ch

agent_ps.channels.idg-ch.type = memory
agent_ps.channels.idg-ch.keep-alive = 60
agent_ps.channels.idg-ch.capacity = 100
agent_ps.channels.idg-ch.transactionCapacity = 100

agent_ps.sinks.idg-sk.type = avro
agent_ps.sinks.idg-sk.hostname = 11.12.112.215
agent_ps.sinks.idg-sk.port = 44440
agent_ps.sinks.idg-sk.batch-size = 20
agent_ps.sinks.idg-sk.request-timeout = 3000
agent_ps.sinks.idg-sk.channel = idg-ch

二、flume啓動
1.進入到flume的bin目錄下:
[root@clsserv202 bin]# pwd
/home/jason/bigdata/flume-1.6.0/bin
[root@clsserv202 bin]# ll
總用量 36
-rwxrwxrwx. 1 root root 12845 9月 8 14:37 flume-ng
-rwxrwxrwx. 1 root root 936 9月 8 14:37 flume-ng.cmd
-rwxrwxrwx. 1 root root 14041 9月 8 14:37 flume-ng.ps1
2.運行flume-ng
3.查看flume-ng進程是否啓動成功
[root@clsserv202 flume-1.6.0]# jps -l
6737 sun.tools.jps.Jps
6700 org.apache.flume.node.Application
6218 com.xyz.idgen.mainframe.Starter
4、在flume連接Kafka時,通過在Kafka集羣創建一個消費者來消費flume創建的topic即可看到flume發來的數據,如果沒有數據到來則說明這中間的連接有問題;

三、常見的source、channel、sink的含義及說明
3.1.source
(1)avro source
avro可以監聽和收集指定端口的日誌,使用avro的source需要說明被監聽的主機ip和端口號,下面給出一個具體的例子:
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141
(2)exec source
exec可以通過指定的操作對日誌進行讀取,使用exec時需要指定shell命令,對日誌進行讀取,下面給出一個具體的例子:
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
a1.sources.r1.channels = c1
(3)spooling-directory source
spo_dir可以讀取文件夾裏的日誌,使用時指定一個文件夾,可以讀取該文件夾中的所有文件,需要注意的是該文件夾中的文件在讀取過程中不能修改,同時文件名也不能修改。下面給出一個具體的例子:
agent-1.channels = ch-1
agent-1.sources = src-1
 
agent-1.sources.src-1.type = spooldir
agent-1.sources.src-1.channels = ch-1
agent-1.sources.src-1.spoolDir = /var/log/apache/flumeSpool
agent-1.sources.src-1.fileHeader = true
(4)syslog source
syslog可以通過syslog協議讀取系統日誌,分爲tcp和udp兩種,使用時需指定ip和端口,下面給出一個udp的例子:
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = syslogudp
a1.sources.r1.port = 5140
a1.sources.r1.host = localhost
a1.sources.r1.channels = c1
3.2.常見的channel
Flume的channel種類並不多,最常用的是memory channel,下面給出例子:
a1.channels = c1
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000
3.3.常見的sink
(1)logger sink
l ogger顧名思義,就是將收集到的日誌寫到flume的log中,是個十分簡單但非常實用的sink
(2)avro sink
avro可以將接受到的日誌發送到指定端口,供級聯agent的下一跳收集和接受日誌,使用時需要指定目的ip和端口:例子如下:
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = 10.10.10.10
a1.sinks.k1.port = 4545
(3)file roll sink
file_roll可以將一定時間內收集到的日誌寫到一個指定的文件中,具體過程爲用戶指定一個文件夾和一個週期,然後啓動agent,這時該文件夾會產生一個文件將該週期內收集到的日誌全部寫進該文件內,直到下一個週期再次產生一個新文件繼續寫入,以此類推,周而復始。下面給出一個具體的例子:
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = file_roll
a1.sinks.k1.channel = c1
a1.sinks.k1.sink.directory = /var/log/flume
(4)hdfs sink
hdfs與file roll有些類似,都是將收集到的日誌寫入到新創建的文件中保存起來,但區別是file roll的文件存儲路徑爲系統的本地路徑,而hdfs的存儲路徑爲分佈式的文件系統hdfs的路徑,同時hdfs創建新文件的週期可以是時間,也可以是文件的大小,還可以是採集日誌的條數。具體實例如下:
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
(5)hbase sink
hbase是一種數據庫,可以儲存日誌,使用時需要指定存儲日誌的表名和列族名,然後agent就可以將收集到的日誌逐條插入到數據庫中。例子如下:
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = hbase
a1.sinks.k1.table = foo_table
a1.sinks.k1.columnFamily = bar_cf
a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
a1.sinks.k1.channel = c1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章