Flume Agent配置
Flume介绍
Flume的Agent主要是由三个重要的组件组成:分别为Source、Channel、Sink。
(1)Source:完成对日志数据的收集,分成transtion和event导入到Channel之中。
(2)Channel:主要提供一个队列的功能,对Source提供的数据进行简单的缓存。
(3)Sink:取出Channel中的数据,相应的存储到文件系统,数据库,或者提交到远程服务器。
配置步骤
检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。
1.jps
2.cd /apps/hadoop/sbin
3../start-all.sh
- 切换到/data/flume2目录下,如不存在需提前创建flume2文件夹,使用wget命令,在此目录下下载http://192.168.1.100:60000/allfiles/flume2中的文件。
1.mkdir /data/flume2
2.cd /data/flume2
3.实验场景1:source:exec,channel:memory,sink:logger,数据是/data/flume2/目录下的goods文件。
场景1是最简单的一个Flume配置,它的结构是由以下几部分组成:首先定义各个组件,其次配置Source的类型为exec,并定义了命令command为tail -n 20 /data/flume2/goods(查看/data/flume2目录下的goods文件里的倒数20行记录),然后配置Channel的类型为memory,Sink的类型为logger,最后将各个组件关联起来(设置Source的Channel为ch,Sink的Channel也为ch)。
切换到/apps/flume/conf目录下,使用vim编辑conf文件,名为:exec_mem_logger.conf。
1.cd /apps/flume/conf
2.vim exec_mem_logger.conf
将以下内容写入exec_mem_logger.conf文件中。
1.#定义各个组件
2.agent1.sources = src
3.agent1.channels = ch
4.agent1.sinks = des
5.
6.#配置source
7.agent1.sources.src.type = exec
8.agent1.sources.src.command = tail -n 20 /data/flume2/goods
9.
10.#配置channel
11.agent1.channels.ch.type = memory
12.
13.#配置sink
14.agent1.sinks.des.type = logger
15.
16.##下面是把上面设置的组件关联起来(把点用线连起来)
17.agent1.sources.src.channels = ch
18.agent1.sinks.des.channel = ch
启动flume命令:
1.flume-ng agent -c /conf -f /apps/flume/conf/exec_mem_logger.conf -n agent1 -Dflume.root.logger=DEBUG,console
参数说明:# source:exec、channel:memory、 sink:logger
-c 配置文件存放的目录
-f 所使用的配置文件路径
-n agent的名称
开启flume后,查看输出效果
按ctrl+c停止flume。
4.实验场景2:source:exec,channel:memory,sink:hdfs。 场景2相对于场景1,它的Sink类型发生了变化,变成了hdfs型。其结构中定义的各组件,Source配置没有变,在配置Channel时最大容量capacity为100000,通信的最大容量为100,在配置Sink时类型变为hdfs,路径设置为hdfs://localhost:9000/myflume2/exec_mem_hdfs/%Y/%m/%d,里面的%Y/%m/%d代表年月日,数据类型为文本型,写入格式为Text格式,写入hdfs的文件是否新建有几种判断方式:rollInterval表示基于时间判断,单位是秒,当为0时,表示不基于时间判断。rollSize表示基于文件大小判断,单位是B,当为0时表示不基于大小判断,rollCount表示基于写入记录的条数来判断,当为0时,表示不基于条数来判断。idleTimeout表示基于空闲时间来判断,单位是秒,当为0时,代表不基于空闲时间来判断。最后和实验1一样通过设置Source和Sink的Channel都为ch,把Source、Channel和Sink三个组件关联起来。
使用vim编辑conf文件,名为:exec_mem_hdfs.conf。
1.cd /apps/flume/conf
2.vim exec_mem_hdfs.conf
将以下内容写入exec_mem_hdfs.conf文件中。
1.#定义各个组件
2.agent1.sources = src
3.agent1.channels = ch
4.agent1.sinks = des
5.
6.#配置source
7.agent1.sources.src.type = exec
8.agent1.sources.src.command = tail -n 20 /data/flume2/goods
9.
10.#配置channel
11.agent1.channels.ch.type = memory
12.agent1.channels.ch.keep-alive = 30
13.agnet1.channels.ch.capacity = 1000000
14.agent1.channels.ch.transactionCapacity = 100
15.
16.#配置sink
17.agent1.sinks.des.type = hdfs
18.agent1.sinks.des.hdfs.path = hdfs://localhost:9000/myflume2/exec_mem_hdfs/%Y%m%d/
19.agent1.sinks.des.hdfs.useLocalTimeStamp = true
20.
21.#设置flume临时文件的前缀为 . 或 _ 在hive加载时,会忽略此文件。
22.agent1.sinks.des.hdfs.inUsePrefix=_
23.#设置flume写入文件的前缀是什么
24.agent1.sinks.des.hdfs.filePrefix = abc
25.agent1.sinks.des.hdfs.fileType = DataStream
26.agent1.sinks.des.hdfs.writeFormat = Text
27.#hdfs创建多久会新建一个文件,0为不基于时间判断,单位为秒
28.agent1.sinks.des.hdfs.rollInterval = 30
29.#hdfs写入的文件达到多大时,创建新文件 0为不基于空间大小,单位B
30.agent1.sinks.des.hdfs.rollSize = 100000
31.#hdfs有多少条消息记录时,创建文件,0为不基于条数判断
32.agent1.sinks.des.hdfs.rollCount = 10000
33.#hdfs空闲多久就新建一个文件,单位秒
34.agent1.sinks.des.hdfs.idleTimeout = 30
35.##下面是把上面设置的组件关联起来(把点用线连起来)
36.agent1.sources.src.channels = ch
37.agent1.sinks.des.channel = ch
启动flume命令:
1.flume-ng agent -c /conf -f /apps/flume/conf/exec_mem_hdfs.conf -n agent1 -Dflume.root.logger=DEBUG,console
在另一窗口,查看HDFS上的输出。
1.hadoop fs -ls -R /myflume2
在执行flume命令的窗口,按ctrl+c停止flume。
5.实验场景3:source:exec channel:file sink:hdfs。
场景3相对于场景2把通道Channel的类型从memory改变为file。其结构在各组件定义,配置Source和设置组件的关联三方面与场景2一样。在配置Channel时把类型变为file型,并设置了检查点目录checkpointDir为/data/flume2/ckdir(用于检查Flume与HDFS是否正常通信),还设置了数据存储目录dataDir为/data/flume2/dataDir。在Sink配置中相对场景2增添了useLocalTimeStamp、inUsePrefix和filePrefix这三个设置。useLocalTimeStamp设置是判断是否开启使用本地时间戳,当设置为true是表示开启。inUsePrefix表示设置临时文件的前缀这里设置为"_",filePrefix表示文件的前缀设置,这里设置为abc。
使用vim编辑conf文件,名为:exec_file_hdfs.conf。
1.cd /apps/flume/conf
2.vim exec_file_hdfs.conf
将以下内容写入到exec_file_hdfs.conf文件中。
1.#定义各个组件
2.agent1.sources = src
3.agent1.channels = ch
4.agent1.sinks = des
5.
6.#配置source
7.agent1.sources.src.type = exec
8.agent1.sources.src.command = tail -n 20 /data/flume2/goods
9.
10.#配置channel
11.agent1.channels.ch.type = file
12.agent1.channels.ch.checkpointDir = /data/flume2/ckdir
13.agent1.channels.ch.dataDirs = /data/flume2/datadir
14.
15.#配置sink
16.agent1.sinks.des.type = hdfs
17.agent1.sinks.des.hdfs.path = hdfs://localhost:9000/myflume2/exec_file_hdfs/%Y%m%d/
18.agent1.sinks.des.hdfs.useLocalTimeStamp = true
19.
20.#设置flume临时文件的前缀为 . 或 _ 在hive加载时,会忽略此文件。
21.agent1.sinks.des.hdfs.inUsePrefix=_
22.#设置flume写入文件的前缀是什么
23.agent1.sinks.des.hdfs.filePrefix = abc
24.agent1.sinks.des.hdfs.fileType = DataStream
25.agent1.sinks.des.hdfs.writeFormat = Text
26.#hdfs创建多久会新建一个文件,0为不基于时间判断,单位为秒
27.agent1.sinks.des.hdfs.rollInterval = 30
28.#hdfs写入的文件达到多大时,创建新文件 0为不基于空间大小,单位B
29.agent1.sinks.des.hdfs.rollSize = 100000
30.#hdfs有多少条消息记录时,创建文件,0为不基于条数判断
31.agent1.sinks.des.hdfs.rollCount = 10000
32.#hdfs空闲多久就新建一个文件,单位秒
33.agent1.sinks.des.hdfs.idleTimeout = 30
34.##下面是把上面设置的组件关联起来(把点用线连起来)
35.agent1.sources.src.channels = ch
36.agent1.sinks.des.channel = ch
启动flume命令:
1.flume-ng agent -c /conf -f /apps/flume/conf/exec_file_hdfs.conf -n agent1 -Dflume.root.logger=DEBUG,console
在另一窗口,查看HDFS上的输出。
1.hadoop fs -ls -R /myflume2
在执行flume命令的窗口,按ctrl+c停止flume。
6.实验场景4:source:syslogtcp,channel:memory,sink:logger。
场景4是一个比较简单的Flume组件配置。首先定义了各组件,然后配置Source,Source的类型配置为syslogtcp,监听端口为6868,主机名为localhost,接下来是配置了Channel的类型为memeory,Sink的类型为logger,最后用通过定义Source和Sink的Channel都为ch,来将Source、Channel和Sink三个相关联起来。
使用vim编辑conf文件,名为:syslog_mem_logger.conf。
1.cd /apps/flume/conf
2.vim syslog_mem_logger.conf
将以下内容写入到syslog_mem_logger.conf文件中。
1.#定义各个组件
2.agent1.sources = src
3.agent1.channels = ch
4.agent1.sinks = des
5.
6.#配置source
7.agent1.sources.src.type = syslogtcp
8.agent1.sources.src.port = 6868
9.agent1.sources.src.host = localhost
10.
11.#配置channel
12.agent1.channels.ch.type = memory
13.
14.#配置sink
15.agent1.sinks.des.type = logger
16.
17.##下面是把上面设置的组件关联起来(把点用线连起来)
18.agent1.sources.src.channels = ch
19.agent1.sinks.des.channel = ch
启动flume命令:
1.flume-ng agent -c /conf -f /apps/flume/conf/syslog_mem_logger.conf -n agent1 -Dflume.root.logger=DEBUG,console
在另一个窗口,向6868端口发送数据:
1.echo “hello can you hear me?” | nc localhost 6868
在刚才执行启动flume命令的窗口查看输出