Flume的安装与使用

news/2024/11/17 1:10:46/

一、简介

1.1、概念

Apache Flume 是一个分布式、可靠且可用的系统,专为收集、聚合和移动大量日志数据而设计。它的架构基于流式数据流模型,允许开发者通过简单的配置实现从多个来源收集数据,通过简单的配置文件,用户即可完成复杂的数据流定义,大大降低了使用门槛。Flume 最常见的应用场景是从 Web 服务器或其他服务的日志文件中实时收集数据,并将这些数据传输到一个或多个目标位置,如HDFS(Hadoop分布式文件系统)、关系数据库、消息队列等。

1.2、特点

高可用性:Flume 设计有故障恢复机制,能够自动重试失败的操作,确保数据的可靠传输。
可扩展性:用户可以根据数据流量的变化动态调整Agent的数量,轻松应对数据增长的需求。
灵活性:支持多种数据源和目的地,可以通过配置文件轻松定制数据流,满足不同业务场景的需求。
易用性:提供了丰富的插件和配置选项,无需编程即可实现复杂的数据收集和传输任务。

二、安装

2.1、上传解压重命名

上传到  /opt/moudles  下

解压到  /opt/installs  下

tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /opt/installs

重命名

cd /opt/installs

mv apache-flume-1.9.0-bin/ flume

2.2、修改配置文件

来到  /opt/instals/flume/conf  下

cp flume-env.sh.template flume-env.sh

将JAVA_HOME路径修改为自己的jdk路径

修改环境变量

vi /etc/profile

 

export FLUME_HOME=/opt/installs/flume
export PATH=$PATH:$FLUME_HOME/bin

刷新一下:  source /etc/profile

三、使用(以案例形式)

参考网址:Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了

flume 的使用是编写 conf文件的,运行的时候指定该文件

# 定义组件的名字
<Agent>.sources = <Source>
a1.sources=s1
<Agent>.channels = <Channel1> <Channel2>
a1.channels=c1
<Agent>.sinks = <Sink>
a1.sinks=sink1

# 设置source 和 channel 之间的关系
<Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...
a1.sources.s1.channels=c1

# 设置sink 和 channel 之间的关系
<Agent>.sinks.<Sink>.channel = <Channel1>
a1.sinks.sink1.channel=c1

先定义agent的名字,再定义agent中三大组件的名字
接着定义各个组件之间的关联关系

3.1、Avro+Memory+Logger

可以在flume的conf下创建一个 myconf  文件夹来存放写的文件

avro: 是监听某个端口是否有信息的工具
memory: 内存
logger: 控制台
即将演示一个场景:给服务器上的一个端口发送消息,消息经过内存,打印到控制台上。

#编写s1的类型是什么
a1.sources.s1.type = avro
a1.sources.s1.bind = 192.168.32.128
a1.sources.s1.port = 4141
a1.sources.s1.channels = c1 

找到channel中的memory类型,再设置一下

a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
#source 或者 sink 每个事务中存取 Event 的操作数量
a1.channels.c1.transactionCapacity = 10000 

接着查找sink,sink的类型是logger

 a1.sinks.s2.channel = c1
a1.sinks.s2.type = logger

最终合并起来的文件就是:

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = bigdata01
a1.sources.r1.port = 4141

a1.channels.c1.type = memory

a1.sinks = k1
a1.sinks.k1.type = logger
a1.sinks.k1.channel = c1

 在myconf文件夹下创建conf文件  avro-memory-log.conf   将上面的代码粘贴进去,随后运行它

flume-ng agent -c ../ -f avro-memory-log.conf -n a1 -Dflume.root.logger=INFO,console

-c  后面跟上 配置文件的路径
-f  跟上自己编写的conf文件
-n  agent的名字
-Dflume.root.logger=INFO,console   INFO 日志输出级别  Debug,INFO,warn,error 等

接着向端口中发送数据:

flume-ng avro-client -c /opt/installs/flume/conf/ -H bigdata01 -p 4141 -F /home/hivedata/arr1.txt

给avro发消息,使用avro-client

 flume是没有运行结束时间的,它一直监听某个Ip的端口,有消息就处理,没消息,就等着,反正不可能运行结束。

如果想停止,可以使用ctrl + c 终止flume

3.2、Exec + Memory + HDFS

到企业中怎么知道用什么呢?

取决于公司的业务,理论将 sources channel sink 可以任意组合

以下版本演示的是没有时间语义的案例:

文件名:exec-memory-hdfs.conf

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hivedata/arr1.txt  #虚拟机上的目录,一定要存在
a1.sources.r1.channels = c1

a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000


a1.sinks = k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/event/ #在hdfs上的被抽取消息的存储位置

 flume-ng agent -c ./ -f exec-memory-hdfs.conf -n a1 -Dflume.root.logger=INFO,console

不断向 arr1.txt  文件中输入数据即可观察到被抽取的现象

echo "nidejiaobuliuliangdaotianya" >> arr1.txt

3.3、Spool +File + HDFS

Spooling Directory

spool 这个效果是抽取一个文件夹的效果,文件夹中不断的产生新的文件,我将这些新的文件上传至hdfs。

文件名:spool-file-hdfs.conf

a1.channels = ch-1
a1.sources = src-1

a1.sources.src-1.type = spooldir
a1.sources.src-1.channels = ch-1
a1.sources.src-1.spoolDir = /home/scripts/
a1.sources.src-1.fileHeader = true

a1.channels.ch-1.type = file

a1.sinks = k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = ch-1
a1.sinks.k1.hdfs.path = /flume/

以上的采集只能采集到文件夹中是否有新的文件产生,不能采集变化的文件。

抽取一个文件夹中的所有文件,子文件夹中的文件是不抽取的,抽取过的文件,数据发生了变化,也不会再抽取一次。

3.4、tailDir + Memory + HDFS [ 非常常用 ]

tailDir 是用来监控多个文件夹下的多个文件的,只要文件内容发生变化,就会再次的进行数据的抽取

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = TAILDIR
a1.sources.r1.channels = c1
a1.sources.r1.filegroups = f1
# . 代表的意思是一个任意字符   * 代表前面的字符出现0到多次
a1.sources.r1.filegroups.f1 = /home/scripts/datas/.*txt.*


a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000

a1.sinks = k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume3/logs

运行:

flume-ng agent -c ./ -f taildir-memory-hdfs.conf -n a1 -Dflume.root.logger=INFO,console 


http://www.ppmy.cn/news/1547580.html

相关文章

从0开始学习机器学习--Day26--聚类算法

无监督学习(Unsupervised learning and introduction) 监督学习问题的样本 无监督学习样本 如图&#xff0c;可以看到两者的区别在于无监督学习的样本是没有标签的&#xff0c;换言之就是无监督学习不会赋予主观上的判断&#xff0c;需要算法自己去探寻区别&#xff0c;第二张…

多模态大模型简介

多模态大模型是机器学习领域的一个新兴趋势&#xff0c;它结合了文本、图像、音频等多种数据模态&#xff0c;以实现更全面和深入的信息理解和处理。这种模型能够处理跨模态任务&#xff0c;如图像标注、视觉问答、文本到图像的生成等&#xff0c;是人工智能领域的重要进展。 技…

利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成

在软件测试工程师的日常工作中&#xff0c;需求分析是测试工作中的关键步骤。需求文档决定了测试覆盖的范围和测试策略&#xff0c;而测试用例的编写往往依赖于需求的准确理解。传统手工分析需求耗时长&#xff0c;尤其在面对大量需求和复杂逻辑时容易遗漏细节。本文将以电商网…

去中心化存储:Web3数据安全新标准

随着Web3的到来&#xff0c;去中心化存储开始成为保护数据的新方法。以前&#xff0c;我们的数据大多都存在几个大公司的大服务器上&#xff0c;这种方式虽然方便管理&#xff0c;但随着数据越来越多、越来越重要&#xff0c;它的安全问题也越来越明显。而去中心化存储&#xf…

DriveLM 论文学习

论文链接&#xff1a;https://arxiv.org/pdf/2312.14150 代码链接&#xff1a;https://github.com/OpenDriveLab/DriveLM 解决了什么问题&#xff1f; 当前&#xff0c;自动驾驶方案的性能仍然不足。一个必要条件就是泛化能力&#xff0c;需要模型能处理未经训练的场景或不熟…

电商系统开发:Spring Boot框架实战

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

针对git、giteeVSCode连接的使用 || Live Share插件使用

1.下载git 链接 打开终端&#xff0c;桌面鼠标右键 2.配置密钥 登录gitee。 设置密钥 查看官方文档 跟着教程 复制最后的输出进行密钥添加 验证是否添加成功 3.创建&连接远程仓库 创建仓库 git终端进行配置 远程仓库克隆到本地 桌面终端clone,克隆他人|自己的仓库到本地…

【网络安全】Cookie SameSite属性

未经许可,不得转载。 文章目录 背景CSRF 攻击SameSite 属性StrictLaxNone背景 为了有效防止 CSRF 攻击并保护用户隐私,Chrome 从 51 版本开始引入了 SameSite 属性,专门用于限制第三方 Cookie 的使用,进而减少安全风险。 CSRF 攻击 跨站请求伪造(CSRF)攻击是指恶意网站…