Flume的简单使用

一.flume介绍

1.flume是一个分布式的日志采集系统

2.在flume系统中,最核心的是agent,每个agent都相当于一个数据传递员。

  在agent内部有source,sink,channel

  source是获取数据的来源

  sink是采集数据的传送目的,往下一级agent传递或者网存储系统传递数据

  channel是agent内部传输通道,用于将数据从source传到sink

3.单个agent采集

 

  多个agent采集

二.flume的简单使用--采集来自端口的信息

1.首先要在flume的conf目录下新建一个文件netcat-logger.conf(文件名自定义)

2.在该文件下编写以下内容

a1.sources = r1
a1.sinks = k1
a1.channels = c1

# describe source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# describe sink
a1.sinks.k1.type = logger

# describe channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# describe the ralationship between source channel sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

注意:最后一行的a1.sinks.k1.channel就是这么写,而不是a1.sinks.k1.channels

3.启动flume

在flume目录下输入如下命令

bin/flume-ng agent -c conf -f conf/netcat-logger.conf  -n a1 -Dflume.root.logger=INFO,console

其中 -c是指定配置文件所在目录

-f是配置采集方案的文件

-n是指定我们的agent的名字

-Dflume.root.logger=INFO,console 是设置日志等级

4.测试

首先打开telnet,并向flume监听的端口发送消息

telnet localhost 44444

这时候在telnet发送的消息,flume都会在终端打印出来

telnet发送内容:

flume采集到的内容:

三.flume的简单使用--采集文件流信息

1.首先要在flume的conf目录下新建一个文件netcat-logger.conf(文件名自定义)

2.在该文件下编写以下内容

a1.sources = r1
a1.sinks = k1
a1.channels = c1

# describe source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = [监测的本地文件目录地址]
a1.sources.r1.fileHeader = true

# describe sink
a1.sinks.k1.type = logger

# describe channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# describe the ralationship between source channel sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

3.启动flume

在flume目录下输入如下命令

bin/flume-ng agent -c conf -f conf/netcat-logger.conf  -n a1 -Dflume.root.logger=INFO,console

其中 -c是指定配置文件所在目录

-f是配置采集方案的文件

-n是指定我们的agent的名字

-Dflume.root.logger=INFO,console 是设置日志等级

4.测试

首先向待检测目录粘贴一个文件

flume采集之后会在终端输出信息

在检测目录中,传入的文件会被修改文件名,即在文件名后边添加.COMPLETED.

四.flume的简单使用--采集文件流信息到hdfs

1.首先要在flume的conf目录下新建一个文件netcat-logger.conf(文件名自定义)

2.在该文件下编写以下内容

a1.sources = r1
a1.sinks = k1
a1.channels = c1

# describe source,here is the file test.log
a1.sources.r1.type = exec
# we will wirte something to the test.log
a1.sources.r1.command = tail -F [本地文件路径]
a1.sources.r1.channels = c1

# describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/
a1.sinks.k1.hdfs.filePrefix = events-

a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute

# 以下三个条件满足一条就会将记录下沉到hdfs # 条件1:时间间隔是3s a1.sinks.k1.hdfs.rollInterval
= 3 # 条件2:文件写入字符数量超过500字节 a1.sinks.k1.hdfs.rollSize = 500 # 条件3:文件的更新事件超过20条 a1.sinks.k1.hdfs.rollCount = 20 a1.sinks.k1.hdfs.batchSize = 5 a1.sinks.k1.hdfs.useLocalTimeStamp = true a1.sinks.k1.hdfs.fileType = DataStream 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.启动flume

在flume目录下输入如下命令

bin/flume-ng agent -c conf -f conf/netcat-logger.conf  -n a1 -Dflume.root.logger=INFO,console

其中 -c是指定配置文件所在目录

-f是配置采集方案的文件

-n是指定我们的agent的名字

-Dflume.root.logger=INFO,console 是设置日志等级

4.测试

首先要建立一个本地文件,之后要定时写入数据定时写入数据脚本如下,直接在终端输入这些命令就可以做到定时向文件写入数据"1111"

while true
do
echo 1111 >> [文件路径]
sleep 1
done

之后在flume终端会打印消息

此时查看hdfs,会发现指定目录下也会有文件产生

此时说明数据已经写入到hdfs

posted @ 2019-05-10 16:35  HelloNewCoder  阅读(337)  评论(0编辑  收藏  举报