Flume 集群部署

  1. Flume基本概念

Flume是一个Java开发的实时日志收集系统,具有高可用性、可靠性和可扩展性。它可以从不同的数据源收集数据,并将数据传送到指定的目的地,如HDFS、HBase、Kafka等。

  1. 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
Comment