Flume的拓扑结构

本文介绍了Apache Flume的环境准备和配置,包括安装Flume,解决jar包冲突,配置netcat监听端口数据打印到控制台,以及实时监听文件保存到HDFS的案例。此外,还探讨了Flume的多种工作模式,如简单串联、复制和多路复用、负载均衡和故障转移、聚合等,以及agent之间的连接和内部原理。
摘要由CSDN通过智能技术生成

环境准备:





1.安装flume

下载地址

http://archive.apache.org/dist/flume/

上传到linux并解压jar包

tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/

修改apache-flume-1.9.0-bin的名称为flume

mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume

解决jar包冲突:删除flume/lib中的guava-11.0.2.jar

rm -rf /opt/module/flume/lib/guava-11.0.2.jar

2.配置netcat

安装netcat工具

sudo yum install -y nc

判断端口是否被占用

sudo netstat -tunlp | grep 端口号

入门案例1-监听端口数据打印到控制台





在在flume目录下创建job文件夹

mkdir job

配置文件flume-netcat-logger.conf

[XXX@hadoop102 flume]$ vim job/flume-netcat-logger.conf

添加如下内容:

#1、定义agent、source、channel、sink的名称
#a1是agent的名称[由自己定义]
#r1是source的名称
#c1的channel的名称
#k1是sink的名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#2、描述source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 9999
#3、描述channel
a1.channels.c1.type = memory
#指定channel的容量[指定channel中最多可以存放多少个Event]
a1.channels.c1.capacity = 100
#transactionCapacity 事务容量[事务容量必须<=capacity]
a1.channels.c1.transactionCapacity = 100
#4、描述sink
a1.sinks.k1.type = logger
#5、关联source->channel->sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

开启flume监听端口

bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-netcat-lo

使用netcat工具向本机的9999端口发送内容

需开启另一个命令行窗口

nc localhost 9999
hello 
world

入门案例2-实时监听文件保存到HDFS





创建配置文件flume-file-hdfs.conf

[XXX@hadoop102 flume]$ vim job/flume-file-hdfs.conf

添加如下内容

#1、定义agent、source、channel、sink的名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#2、描述source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /opt/module/a.txt
a1.sources.r1.shell = /bin/bash -c
#batchsize必须<=事务的容量
a1.sources.r1.batchSize = 100
#3、描述channel
a1.channels.c1.type = memory
#channel的容量
a1.channels.c1.capacity = 100
#事务的容量[事务容量必须<=channel的容量]
a1.channels.c1.transactionCapacity = 100
#4、描述sink
a1.sinks.k1.type = hdfs
#设置hdfs存储目录
a1.sinks.k1.hdfs.path = hdfs://hadoop102:9820/flume/%Y%m%d
#设置存储文件的前缀
a1.sinks.k1.hdfs.filePrefix = flume-
#设置滚动的时间间隔
a1.sinks.k1.hdfs.rollInterval = 3
#设置滚动的文件的大小[当文件达到指定的大小之后,会生成新文件,flume向新文件里面写入内存]
a1.sinks.k1.hdfs.rollSize = 13421000
#设置文件写入多少个Event就滚动
a1.sinks.k1.hdfs.rollCount = 0
#设置每次向HDFS写入的时候批次大小
a1.sinks.k1.hdfs.batchSize = 100
#指定写往HDFS的时候的压缩格式
#a1.sinks.k1.hdfs.codeC = 100
#指定写往HDFS的时候的文件格式[SequenceFile-序列化文件,DataStream-文本文件,CompressedStream-压缩文件]
a1.sinks.k1.hdfs.fileType = DataStream
#是否按照指定的时间间隔生成文件夹
a1.sinks.k1.hdfs.round = true
#指定生成文件夹的时间值
a1.sinks.k1.hdfs.roundValue = 24
#指定生成文件夹的时间单位[hour、second、minute]
a1.sinks.k1.hdfs.roundUnit = hour
#是否使用本地时间
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#5、关联source->channel->sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

②开启集群

[XXX@hadoop102 flume]$ mycluster start

mycluster脚本如下:

#!/bin/bash
if [ $# -lt 1 ]
then
        echo " args number error!!!!"
        exit
fi

case $1 in
"start")
        ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
        ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
        hdfs dfsadmin -safemode leave
        ;;
"stop")
        ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
        ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
        ;;
*)
        echo "args info error!!!!"
        ;;
esac

运行Flume

[XXX@hadoop102 flume]$ bin/flume-ng agent -n a1 -c conf -f job/flume-file-hd

对txt文件进行修改/opt/module/a.txt

[XXX@hadoop102 flume]$ echo "aabbcc" >> /opt/module/a.txt

在HDFS上查看文件

在这里插入图片描述

      agent与agent之间连接的时候需要使用(AVRO端口监听)

 1.  简单串联

在这里插入图片描述

 这种模式是将多个 flume 的agent顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量,flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。

   2. 复制和多路复用

在这里插入图片描述

Flume 支持将事件流向一个或者多个目的地。这种模式可以将相同数据复制到多个channel 中,或者将不同数据分发到不同的 channel 中,sink 可以选择传送到不同的目的地。

3. 负载均衡和故障转移

在这里插入图片描述

Flume支持使用将多个sink逻辑上分到一个sink组,sink组配合不同的SinkProcessor可以实现负载均衡和错误恢复的功能。
对于负载均衡来说,缓解了单个HDFSsink的压力,也缓解了channel中缓冲的数据量。
对于故障转移来说,只能是对于从第二层开始的agent进行故障转移。Flume本身就存在单点故障问题。

4. 聚合

在这里插入图片描述

这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析。

5.  负载均衡  

6. 复制模式

Flume支持将事件流向一个或者多个目的地。这种模式将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地。

Agent内部原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值