Flume 日志采集系统
- 一、Flume 概述
- 二、Flume 架构设计
- 2.1 架构图
- 2.2 Flume Source 类型
- 2.3 Flume Channel 类型
- 2.4 Flume Sink 类型
- 三、Flume 安装部署
- 3.1 下载解压
- 3.2 上传解压
- 3.3 修改配置文件
- 2.4 启动 Flume Agent
- 四、案例实践:Flume 分布式集群搭建
- 4.1 Flume 集群架构图
- 4.2 配置 Flume 采集服务
- 4.3 配置 Flume 聚合服务
- 4.4 添加配置文件中的目录
- 4.5 Flume 集群测试
- 4.5.1 启动聚合服务
- 4.5.2 启动采集服务
- 4.5.3 准备测试数据
一、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 打印采集的日志