Flume基本概念
Flume是一个Java开发的实时日志收集系统,具有高可用性、可靠性和可扩展性。它可以从不同的数据源收集数据,并将数据传送到指定的目的地,如HDFS、HBase、Kafka等。
Flume架构
Flume的架构主要包括三个组件:Source、Channel和Sink。
Source:负责从数据源接收数据,如文件、网络、消息队列等。
Channel:负责在Source和Sink之间传输数据,支持内存、文件、数据库等多种类型。
Sink:负责将数据发送到目的地,如HDFS、HBase、Kafka等。
图中 Agent是一个 jvm进程
包含三个组件:
source 收集
Channel 缓存
Sink 发送
Flume 的启动
$FLUME_HOME/bin/flume-ng agent -c $FLUME_HOME/conf/ -f $FLUME_HOME/conf/<配置文件>.conf -n a1 -Dflume.root.logger=INFO,console
搭建:
Flume和kafka容易搞混
Kafka是用于将不同的数据源汇总起来,做流式传输、数据持久化的工具
Flume是收集日志的工具
上传并解压:
cd /opt/softs # 打开flume压缩包所在目录
tar -xvf apache-flume-1.9.0-bin.tar.gz -C /opt/module/ # 解压到 /opt/modul
cd /opt/module # 打开解压到的目录
mv apache-flume-1.9.0-bin flume-1.9.0 # 重命名
配置环境变量:
vim /etc/profile
# Flume
export FLUME=/opt/module/flume-1.9.0
export PATH=$PATH:$FLUME_HOME
scp /etc/profile slave1:/etc/
scp /etc/profile slave2:/etc/
配置flume-env.sh:
添加JAVA_HOME
到flume-env.sh
cd /opt/module/flume-1.9.0/conf
cp flume-env.sh.template flume-env.sh
vim flume-env.sh
# 添加一行
export JAVA_HOME=/opt/module/jdk1.8.0_212
删除guava 来兼容 hadoop 3.1.x
cd /opt/module/flume-1.9.0/lib
rm -rf guava*
分发:
cd /opt/module
scp -r flume-1.9.0 slave1:/opt/module/
scp -r flume-1.9.0 slave2:/opt/module/
复制hadoop的lib复制到flume的lib:
用于连接 flume → hadoop
cd /opt/module/flume-1.9.0/lib
cp $HADOOP_HOME/share/hadoop/common/*.jar ./
cp $HADOOP_HOME/share/hadoop/common/lib/*.jar ./
cp $HADOOP_HOME/share/hadoop/hdfs/*.jar ./
创建一个配置文件:
随便创建一个 xxxx.conf 在 flume/conf 目录下
conf 文件不能在语句后面写备注 # 比如这样 是不可以的
cd /opt/module/flume-1.9.0/conf
# 创建相关路径
mkdir /ver/log/flume/ -p
hadoop dfs -mkdir nginx-events
touch fileToHDFS.conf
a1.sources = r1
a1.channels = c1
a1.sinks = k1
a1.sources.r1.type = TAILDIR
a1.sources.r1.channels = c1
# 存储记录位置
a1.sources.r1.positionFile = /var/log/flume/tail_dir.json
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.filegroups.f1 = /var/log/nginx/access.log
a1.sources.r1.filegroups.f2 = /var/log/nginx/error.log
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
# 保存到HDFS的位置
a1.sinks.k1.hdfs.path = hdfs://master:8020/user/root/nginx-events
# 文件前缀
a1.sinks.k1.hdfs.filePrefix = event-
a1.sinks.k1.hdfs.fileType = DataStream
# 随时间滚动 0 表示不滚动 这里设置1Mb 开启新文件
a1.sinks.k1.hdfs.rollSize = 1048576
# 随event滚动 开启新文件数量 0 关闭 event 开启新文件
a1.sinks.k1.hdfs.rollCount = 0
# 随时间滚动 这里设置60s
a1.sinks.k1.hdfs.rollInterval = 30
# 防止flume自动开启新文件 不管hdfs备份
a1.sinks.k1.hdfs.minBlockReplicas = 1
a1.channels.c1.type = memory
# 存储在通道中的最大事件数
a1.channels.c1.capacity = 10000
# 每次传输 通道从源最大获取到的event
a1.channels.c1.transactionCapacity = 100
# 允许最大占用内存
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000
a1.sources.r1.channels = c1
a1.sinks.k1.chanels = c1
启动:
$FLUME_HOME/bin/flume-ng agent -c $FLUME_HOME/conf/ -f $FLUME_HOME/conf/fileToHDFS.conf -n a1 -Dflume.root.logger=INFO,console
评论