0%

Flume搭建

介绍

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。

使用Flume,我们可以将从多个服务器中获取的数据迅速的移交给Hadoop中,可以高效率的将多个网站服务器中收集的日志信息存入HDFS/HBase中。

注意:flume只需要在主节点配置,不需要在其他节点配置

环境配置

解压 and 配置环境变量

1
2
3
4
5
6
7
8
9
[root@master software]# tar -zvxf apache-flume-1.8.0-bin.tar.gz -C /app/servers/
[root@master servers]# mv apache-flume-1.8.0-bin flume-1.8.0

#环境变量
[root@master servers]# vi /etc/profile
#Flume Env
export FLUME_HOME=/app/servers/flume/flume-1.8.0
export PATH=$PATH:$FLUME/bin
[root@master servers]# source /etc/profile

修改flume-conf.properties文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@master flume-1.8.0]# cd conf/
[root@master conf]# cp flume-conf.properties.template flume-conf.properties
[root@master conf]# vi flume-conf.properties
# 最后一行添加下面内容
#agent1表示代理名称
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1

#配置source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/app/servers/flume/logs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp

#配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/app/servers/flume/logs_tmp_cp
agent1.channels.channel1.dataDirs=/app/servers/flume/logs_tmp

#配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://master:9000/logs
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=1
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d

# 我们看到上面的配置文件中的代理 agent1.sourrces.source1.spoolDir 监听文件夹是/app/servers/flume/logs,所以我们手动创建一下
[root@master flume-1.8.0]# mkdir -p data/logs

# 上面的配置文件中 agent1.sinks.sink1.hdfs.path=hdfs://master:9000/logs下,即将监听到的/app/servers/flume-1.8.0/data/logs下的文件自动上传到hdfs的/logs下,所以我们要手动创建hdfs下的目录
[root@master flume-1.8.0]# hdfs dfs -mkdir /logs

image-20240321191936353

测试

1
2
3
4
5
6
7
8
9
10
11
# 启动服务
[root@master flume-1.8.0]# bin/flume-ng agent -n agent1 -c conf -f /app/servers/flume/flume-1.8.0/conf/flume-conf.properties -Dflume.root.logger=DEBUG,console &

# 在/app/servers/data/logs下随便创建个文件
[root@master logs]# vi flume_test.txt
hello
我是练习两坤年的
学生

# 然后我们会发现hdfs的logs下自动上传了我们刚创建的文件
[root@master logs]# hdfs dfs -ls /logs

image-20240321191943659

image-20240321191950424

至此 Flume安装配置完成

控制台输出

复制配置文件

1
cp  flume-env.sh.template  flume-env.sh

修改

1
vim  flume-env.sh

最后面一行加上jdk路径

1
export JAVA_HOME=/app/servers/jdk1.8.0_191

新建 example.conf配置文件

1
touch example.conf

编辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
vim example.conf
a1.sources=r1
a1.sinks=k1
a1.channels=c1

a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=514

#start
#控制台输出
a1.sinks.k1.type=logger

#存在logs文件夹中
#a1.sinks.k1.type=file_roll
#a1.sinks.k1.sink.directory=/app/servers/flume/logs
#end

a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity = 1000

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

a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=514

#start
#控制台输出
a1.sinks.k1.type=logger

#存在logs文件夹中
#a1.sinks.k1.type=file_roll
#a1.sinks.k1.sink.directory=/app/servers/flume/logs
#end

a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity = 1000

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

启动

1
./bin/flume-ng agent --conf conf --conf-file conf/example.conf --name a1 -Dflume.root.logger=INFO,console

测试

另起一个控制台,用telnet 连接测试
telnet 127.0.0.1 514

输入字符串 回车

image.png

查看开启flume控制台是否有输出

image-20240321192105595