Flume 日志采集系统

一、Flume 概述

Flume是Cloudera开发的一个分布式的、可靠的、高可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化的数据存储系统中。随着互联网的发展,特别是移动互联网的兴起,产生了海量的用户日志信息,为了实时分析和挖掘用户需求,需要使用Flume高效快速采集用户日志,同时对日志进行聚合避免小文件的产生,然后将聚合后的数据通过管道移动到存储系统进行后续的数据分析和挖掘。

二、Flume 架构设计

2.1 架构图

在这里插入图片描述

2.2 Flume Source 类型

在这里插入图片描述

2.3 Flume Channel 类型

在这里插入图片描述

2.4 Flume Sink 类型

在这里插入图片描述

三、Flume 安装部署

3.1 下载解压

下载地址:https://archive.apache.org/dist/flume/

本次下载的是1.9.0版本

3.2 上传解压

生成到 /usr/local ,解压脚本如下:

[root@hadoop1 local]# tar zxvf /usr/local/apache-flume-1.9.0-bin.tar.gz

创建软连接

[root@hadoop1 local]# ln -s apache-flume-1.9.0-bin flume

在这里插入图片描述

3.3 修改配置文件

拷贝配置文件

[root@hadoop1 flume]# cp /usr/local/flume/conf/flume-conf.properties.template /usr/local/flume/conf/flume-conf.properties

可以使用默认配置,不修改

[root@hadoop1 flume]# vim /usr/local/flume/conf/flume-conf.properties

在这里插入图片描述

2.4 启动 Flume Agent

[root@hadoop1 flume]# /usr/local/flume/bin/flume-ng agent -n agent -c conf -f /usr/local/flume/conf/flume-conf.properties -Dflume.root.logger=INFO,console

打印消息到控制台
在这里插入图片描述

四、案例实践:Flume 分布式集群搭建

4.1 Flume 集群架构图

在这里插入图片描述
蓝色部分为日志采集,通常在需要采集日志的服务器部署,绿色的 channel 为聚合服务器,对采集的数据进行聚合,并做了负载

4.2 配置 Flume 采集服务

[root@hadoop1 flume]# vim /usr/local/flume/conf/taildir-file-selector-avro.properties

添加如下内容:

#定义source、channel、sink的名称
agent1.sources = taildirSource
agent1.channels = fileChannel
agent1.sinkgroups = g1
agent1.sinks = k1 k2
# 定义和配置一个TAILDIR Source
agent1.sources.taildirSource.type = TAILDIR
agent1.sources.taildirSource.positionFile = /usr/local/data/flume/taildir_position.json
agent1.sources.taildirSource.filegroups = f1
agent1.sources.taildirSource.filegroups.f1 = /usr/local/data/flume/logs/sogou.log
agent1.sources.taildirSource.channels = fileChannel
# 定义和配置一个file channel
agent1.channels.fileChannel.type = file
agent1.channels.fileChannel.checkpointDir = /usr/local/data/flume/checkpointDir
agent1.channels.fileChannel.dataDirs = /usr/local/flume/dataDirs
#定义和配置一个 sink组
agent1.sinkgroups.g1.sinks = k1 k2
#为sink组定义一个处理器,load_balance表示负载均衡  failover表示故障切换
agent1.sinkgroups.g1.processor.type = load_balance
agent1.sinkgroups.g1.processor.backoff = true
#定义处理器数据发送方式,round_robin表示轮询发送  random表示随机发送
agent1.sinkgroups.g1.processor.selector = round_robin
agent1.sinkgroups.g1.processor.selector.maxTimeOut=10000
#定义一个sink将数据发送给hadoop2节点
agent1.sinks.k1.type = avro
agent1.sinks.k1.channel = fileChannel
agent1.sinks.k1.batchSize = 1
agent1.sinks.k1.hostname = hadoop2
agent1.sinks.k1.port = 1234
#定义另一个sink将数据发送给hadoop3节点
agent1.sinks.k2.type = avro
agent1.sinks.k2.channel = fileChannel
agent1.sinks.k2.batchSize = 1
agent1.sinks.k2.hostname = hadoop3
agent1.sinks.k2.port = 1234

4.3 配置 Flume 聚合服务

聚合前,先把 /usr/local/flume 文件夹内容同步到 hadoop2和hadoop3

[root@hadoop1 flume]# deploy.sh /usr/local/flume /usr/local/ slave

在 hadoop2 和 hadoop3 进行如下相同的配置:

[root@hadoop2 flume]# vim /usr/local/flume/conf/avro-file-selector-logger.properties

添加内容:

#定义source、channel、sink的名称
agent1.sources = r1
agent1.channels = c1
agent1.sinks = k1
# 定义和配置一个avro Source
agent1.sources.r1.type = avro
agent1.sources.r1.channels = c1
agent1.sources.r1.bind = 0.0.0.0
agent1.sources.r1.port = 1234
# 定义和配置一个file channel
agent1.channels.c1.type = file
agent1.channels.c1.checkpointDir = /usr/local/data/flume/checkpointDir
agent1.channels.c1.dataDirs = /usr/local/data/flume/dataDirs
# 定义和配置一个logger sink
agent1.sinks.k1.type = logger
agent1.sinks.k1.channel = c1

4.4 添加配置文件中的目录

在 hadoop1、hadoop2和hadoop3分别执行如下操作

[root@hadoop1 ~]# mkdir -p /usr/local/data/flume/logs
[root@hadoop1 ~]# touch /usr/local/data/flume/logs/sogou.log

4.5 Flume 集群测试

4.5.1 启动聚合服务

在 hadoop2 和 hadoop3 分别启动如下脚本:

[root@hadoop2 flume]# /usr/local/flume/bin/flume-ng agent -n agent1 -c conf -f /usr/local/flume/conf/avro-file-selector-logger.properties -Dflume.root.logger=INFO,console

在这里插入图片描述

4.5.2 启动采集服务

在 hadoop1 服务器执行如下命令:

[root@hadoop1 flume]# /usr/local/flume/bin/flume-ng agent -n agent1 -c conf -f /usr/local/flume/conf/taildir-file-selector-avro.properties -Dflume.root.logger=INFO,console

在这里插入图片描述

4.5.3 准备测试数据

在 hadoop1 执行如下插入数据脚本:

[root@hadoop1 flume]# echo '00:00:100971413028304674[火炬传递路线时间]1 2www.olympic.cn/news/beijing/2008-03-19/1417291.html' >> /usr/local/data/flume/logs/sogou.log

在这里插入图片描述
hadoop2 和 hadoop3 聚合日志

在这里插入图片描述
在这里插入图片描述

hadoop1 打印采集的日志
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slb190623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值