Flume超级无敌详细讲解

news/2024/4/28 13:12:01/文章来源:https://blog.csdn.net/m0_51388399/article/details/136958687

简介

概述

Flume本身是由Cloudera公司开发的后来贡献给了Apache的一套针对日志进行收集(collecting)、汇聚(aggregating)和传输(moving)的分布式机制。

图-1 Flume图标

Flume本身提供了较为简易的流式结构,使得开发者能够较为简易和方便的搭建Flume的流动模型。

图-2 Flume流动模型图

目前,Flume提供了两大版本:Flume0.x和Flume1.x版本:

1)Flume0.X:又称之为Flume-og版本,依赖于Zookeeper,结构配置相对复杂,现在在市面上已经不怎么常见了。

2)Flume1.X:又称之为Flume-ng版本,不依赖于Zookeeper,结构配置相对简单,是现在比较常用的版本。

截止到目前为止(2023年7月20日),Flume的最新版本是Flume1.11.0版本。

基本概念

在Flume中,有两个基本的概念:Event和Agent。

Event

在Flume中,会将收集到的每一条日志都封装成一个Event对象,所以一个Event就是一条日志。

Event本质上是一个json串,固定的包含两部分:headers和body。即Flume会将收集到的每一条日志封装成一个json,这个json就是一个Event。

{"headers":{},"body":""}

Agent

Agent是Flume流动模型的基本组成部分,固定的包含三个部分:

1)Source:从数据源采集数据(collecting);

2)Channel:将数据进行临时的存储(aggregating);

3)Sink:将数据进行传输(moving)。

流动模型/拓扑结构

Flume中,通过Agent之间相互组合,可以构成复杂的流动模型,包括:单级流动,多级流动,扇入流动,扇出流动以及复杂流动。

单级流动(Agent Flow),顾名思义,即只有1个Agent组成,数据经过Source采集,通过Sink写入目的地,经过一次流动即可。

图-3 单级流动

多级流动(Multi-agent Flow),又叫串联流动,是由2个及以上的Agent串联组成,数据需要流经多个Agent才能写到目的地。

图-4 多级流动

扇入流动(Consolidation),又叫聚集流动,是将多个Agent的结果汇聚到一个Agent中,最终写入目的地。

图-5 扇入流动

扇出流动(Multiplexing the flow),又叫复用流动,是将数据分别传输给多个Agent,写入多个目的地。

图-6 扇出流动

复杂流动(Flexible Flow),按照项目需求,将上述流动模型进行组合,构成的就是复杂流动。

编译和安装

编译

1)进入源码存放目录,上传或者下载Flume的源码包:

# 进入目录           cd /opt/presoftware/

# 官网下载地址

wget https://archive.apache.org/dist/flume/1.11.0/apache-flume-1.11.0-src.tar.gz

2)解压:

tar -xvf apache-flume-1.11.0-src.tar.gz -C /opt/source/

3)进入Flume源码目录:

cd /opt/source/apache-flume-1.11.0-src/

4)编译:

mvn -X package -Pdist,nativeN,docs -DskipTests -Dtar -Dmaven.skip.test=true -Dmaven.javadoc.skip=true -Denforcer.skip=true

5)编译好的安装包在flume-ng-dist/target目录下。

编译错误处理

如果编译过程中提示缺少了eigenbase,那么上传jar包之后,执行:

mvn install:install-file \

-Dfile=DynamoDBLocal-1.11.86.jar \

-DgroupId=com.amazonaws \

-DartifactId=DynamoDBLocal \

-Dversion=1.11.86 \

-Dpackaging=jar

缺少net.hydromatic:linq4j:jar:0.4:

mvn install:install-file \

-Dfile=linq4j-0.4.jar \

-DgroupId=net.hydromatic \

-DartifactId=linq4j \

-Dversion=0.4 \

-Dpackaging=jar

缺少net.hydromatic:quidem:jar:0.1:

mvn install:install-file \

-Dfile=quidem-0.1.1.jar \

-DgroupId=net.hydromatic \

-DartifactId=quidem \

-Dversion=0.1.1 \

-Dpackaging=jar

缺少org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde:

mvn install:install-file \

-Dfile=pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar \

-DgroupId=org.pentaho \

-DartifactId=pentaho-aggdesigner-algorithm \

-Dversion=5.1.5-jhyde \

-Dpackaging=jar

安装

Flume本身是使用Java开发的,所以要求服务器上首先安装了JDK1.8。

1)进入软件预安装目录,上传或者下载安装包:

# 进入预安装目录

cd /opt/presoftware/

# 官网下载地址

wget --no-check-certificate https://dlcdn.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz

2)解压安装包:

tar -xvf apache-flume-1.11.0-bin.tar.gz -C /opt/software/

3)进入Flume安装目录:

cd /opt/software/

4)重命名目录:

mv apache-flume-1.11.0-bin/ flume-1.11.0

5)配置环境变量:

# 编辑文件

vim /etc/profile.d/flumehome.sh

# 在文件中添加

export FLUME_HOME=/opt/software/flume-1.11.0

export PATH=$PATH:$FLUME_HOME/bin

# 保存退出,生效

source /etc/profile.d/flumehome.sh

# 测试

flume-ng version

6)解决Flume的连接池包和Hadoop的连接池包不一致问题:

# 进入Flume的lib目录

cd flume-1.11.0/lib/

# 删除原来的连接池包

rm -rf guava-11.0.2.jar

# 复制Hadoop的连接池包

cp /opt/software/hadoop-3.2.4/share/hadoop/common/lib/guava-27.0-jre.jar ./

入门案例

1)进入Flume中,创建数据目录,用于存放格式文件:

# 进入Flume的安装目录

cd /opt/software/flume-1.11.0/

# 创建数据目录

mkdir data

# 进入目录

cd data

2)创建格式文件:

vim basic.properties

添加内容:

# 指定Agent的名字

# 指定Source的名字

# 如果要配置多个Source,那么Source之间用空格间隔

a1.sources = s1

# 指定Channel的名字

# 如果要配置多个Channel,那么Channel之间用空格间隔

a1.channels = c1

# 指定Sink的名字

# 如果要配置多个Sink,那么Sink之间用空格间隔

a1.sinks = k1

# 配置Source

a1.sources.s1.type = netcat

a1.sources.s1.bind = 0.0.0.0

a1.sources.s1.port = 8090

# 配置Channel

a1.channels.c1.type = memory

# 配置Sink

a1.sinks.k1.type = logger

# 绑定Source和Channel

a1.sources.s1.channels = c1

# 绑定Sink和Channel

a1.sinks.k1.channel = c1

3)启动Flume:

flume-ng agent --name a1 --conf $FLUME_HOME/conf --conf-file basic.properties -Dflume.root.logger=INFO,console

上述命令可以简化为:

flume-ng agent -n a1 -c $FLUME_HOME/conf -f basic.properties -Dflume.root.logger=INFO,console

4)复制窗口,在新窗口中输入:

nc hadoop01 8090

# 回车之后发送数据

5)停掉Flume之后,会发现在当前的data目录下生成了一个新文件flume.log,而我们输入的数据被封装成了Event形式写入到了这个新文件中。

控制台打印

需要注意的是,从Flume1.10.0版本开始,使用log4j2.x替换log4j1.x,使用log4j2.xml替换了log4j.properties,因此使用Logger Sink不再输出到控制台上,而是将结果输出到了flume.log文件中。如果想要将数据打印到控制台上,操作如下:

1)进入Flume的配置文件目录:

cd /opt/software/flume-1.11.0/conf/

2)编辑文件:

vim log4j2.xml

修改文件内容如下:

<Loggers><Logger name="org.apache.flume.lifecycle" level="info"/><Logger name="org.jboss" level="WARN"/><Logger name="org.apache.avro.ipc.netty.NettyTransceiver" level="WARN"/><Logger name="org.apache.hadoop" level="INFO"/><Logger name="org.apache.hadoop.hive" level="ERROR"/><Root level="INFO"><AppenderRef ref="Console"/><AppenderRef ref="LogFile" /></Root></Loggers>

3)回到数据目录下:

cd ../data

4)重新启动Flume,发送数据,会发现数据已经打印到了控制台上。

参数解释

Flume启动过程中,需要用到多个参数,这多个参数的解释如下:

表-1 参数解释

完整写法

简写

解释

flume-ng

Flume启动命令

agent

表示启动Flume的Agent组件

--name

-n

指定要启动的Agent的名字,和格式文件中Agent的名字对应

--conf

-c

指定Flume的配置文件所在的位置,注意,这儿的配置文件是Flume自己的配置文件,而不是我们自己编写的格式文件/数据文件!默认情况下,Flume的配置文件在Flume安装目录的conf目录下

--conf-file

-f

指定要执行的格式文件的位置

-D

指定其他运行的参数

flume.root.logger

指定日志的打印级别和打印位置,可以指定级别包含INFO,WARN和ERROR,可以指定的打印位置包含console和logfile

Source

AVRO Source

AVRO Source会监听指定的端口,接收其他节点传过来的被AVRO序列化之后的数据。AVRO Source结合AVRO Sink可以实现更多的流动模型/拓扑结构,例如多级流动、扇入流动、扇出流动等。

AVRO Source中配置的选项有:

表-2 配置选项

选项

备注

解释

type

required

Source的类型,此处必须是avro

bind

required

要监听的服务器的主机名或者IP

port

required

要监听的端口

channels

required

Source需要绑定的Channel

案例:

1)编辑文件:

vim avrosource.properties

添加如下配置:

a1.sources = s1a1.channels = c1a1.sinks = k1# 配置AVRO Source# 类型必须是avroa1.sources.s1.type = avro# 绑定要监听的主机a1.sources.s1.bind = 0.0.0.0# 绑定要监听的端口a1.sources.s1.port = 8090a1.channels.c1.type = memorya1.sinks.k1.type = loggera1.sources.s1.channels = c1a1.sinks.k1.channel = c1

2)启动Flume:

flume-ng agent -n a1 -c $FLUME_HOME/conf -f avrosource.properties -Dflume.root.logger=INFO,console

3)在新窗口中,创建一个文件,添加内容。

4)启动Flume的avro-client组件,将文件进行AVO序列化之后发送给Avro Source:

flume-ng avro-client -H hadoop01 -p 8090 -F a.txt

avro-client组件中的参数解释:

表-3 参数解释

完整写法

简写

解释

avro-client

指定启动Flume的avro-client组件

--host

-H

指定数据要发送的主机名或者IP

--port

-p

指定数据要发送的端口

--filename

-F

指定要发送的文件

Exec Source

Exec Source会运行指定的命令,然后收集这个命令的执行结果。可以利用这个Source来完成部分场景的监控,例如对方是否有返回,文件是否有新增等。

Exec Source中配置的选项有:

表-4 配置选项

选项

备注

解释

type

required

Source的类型,此处必须是command

command

required

要执行的命令

channels

required

Source需要绑定的Channel

shell

optional

指定命令的类型,最好指定这个属性

案例:监听指定的文件,如果文件中新添了数据,那么自动收集新添的数据。

1)编辑文件:

vim execsource.properties

添加如下内容:

a1.sources = s1a1.channels = c1a1.sinks = k1# 配置Exec Source# 类型必须是execa1.sources.s1.type = exec# 指定命令a1.sources.s1.command = tail -F /opt/software/flume-1.11.0/data/a.txt# 指定Shell类型a1.sources.s1.shell = /bin/bash -ca1.channels.c1.type = memorya1.sinks.k1.type = loggera1.sources.s1.channels = c1a1.sinks.k1.channel = c1

2)启动Flume:

flume-ng agent -n a1 -c $FLUME_HOME/conf -f execsource.properties -Dflume.root.logger=INFO,console

3)新窗口中,向文件中追加数据:

echo 'append' >> /opt/software/flume-1.11.0/data/a.txt

echo 'exec' >> /opt/software/flume-1.11.0/data/a.txt

回到Flume界面,发现新添加的数据被Flume自动收集了。

Spooling Directory Source

Spooling Directory Source用于监听指定的目录,如果目录中有新的文件,那么会自动收集新文件中的数据。注意,被收集过的文件会自动的添加一个后缀。

Spooling Directory Source配置的选项包含:

表-5 配置选项

选项

备注

解释

type

required

Source的类型,此处必须是spooldir

spoolDir

required

要监听的目录

channels

required

Source需要绑定的Channel

fileSuffix

optional

被收集过的文件添加的后缀,默认是.COMPLETED

案例:监听指定的目录,自动收集新文件的内容。

1)编辑文件:

vim spoolsource.properties

添加如下配置:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1027057.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch入门】小土堆PyTorch入门教程完整学习笔记(详细笔记并附练习代码 ipynb文件)

小土堆PyTorch入门教程笔记 最近在观看PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】顺便做点笔记&#xff0c;方便回看&#xff0c;同时也希望记录的笔记能够帮助到更多在入门的小伙伴~ 【注】仅记录个人觉得重要的知识&#xff0c…

在线接口文档预言方案

在线接口文档预言方案 要求&#xff1a; ​ 支持自动生成接口文档 ​ 能够支持在线测试(http&#xff0c;websocket) ​ 对代码没有侵入性 一、目前涉及的相关技术收集 sudo apt update #更新数据 sudo apt upgrade #更新软件 sudo apt install openssh-server #下载安装…

Qt教程 — 3.7 深入了解Qt 控件: Layouts部件

目录 2 如何使用Layouts部件 2.1 QBoxLayout组件-垂直或水平布局 2.2 QGridLayout组件-网格布局 2.3 QFormLayout组件-表单布局 在Qt中&#xff0c;布局管理器&#xff08;Layouts&#xff09;是用来管理窗口中控件位置和大小的重要工具。布局管理器可以确保窗口中的控件在…

鸿蒙开发图形图像:【图形子系统】

图形子系统 图形子系统主要包括UI组件、布局、动画、字体、输入事件、窗口管理、渲染绘制等模块&#xff0c;构建基于轻量OS应用框架满足硬件资源较小的物联网设备或者构建基于标准OS的应用框架满足富设备的OpenHarmony系统应用开发。 1.1 轻量系统 简介 图形子系统主要包括…

武忠祥《660题》高效刷题包+资料分享

660题的难度书虽然比较难&#xff0c;对于基础的考察比较深入&#xff0c;所以&#xff0c;有没有一种可能&#xff0c;做题太慢&#xff0c;是因为基础不好导致的&#xff01; 所以再继续做下去&#xff0c;就没有什么意义了&#xff0c;因为这就像是用一把钝刀去砍树&#x…

Linux 反引号、单引号以及双引号的区别

1.单引号—— 单引号中所有的字符包括特殊字符&#xff08;$,,和\&#xff09;都将解释成字符本身而成为普通字符。它不会解析任何变量&#xff0c;元字符&#xff0c;通配符&#xff0c;转义符&#xff0c;只被当作字符串处理。 2.双引号——" 双引号&#xff0c;除了$,…

spring boot3自定义注解+拦截器+Redis实现高并发接口限流

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 内容简介 实现思路 实现步骤 1.自定义限流注解 2.编写限流拦截器 3.注册拦截器 4.接口限流测试 写在前…

汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考

目录 1.OEM面临的难点 2.Hypervisor的难点思考 2.1 VMs部署到物理内核上的实现方式 2.2 VM调度机制 3.小结 1.OEM面临的难点 为什么汽车ECU在逐渐倡导虚拟化&#xff0c;主要原因是整车电子电气架构从分布式往集中式演进&#xff0c;OEM希望将以前多个ECU的功能聚合到一个…

腾讯云服务器新购、续费、升级如何领取优惠券?

腾讯云作为国内领先的云计算服务提供商&#xff0c;一直致力于为用户提供高效、稳定、安全的云服务。为了吸引广大用户上云&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;其中就包括服务器新购、续费、升级的优惠券。本文将为大家详细介绍如何领取腾讯云服务器优惠券&…

将本地项目上传至码云

1.打开git&#xff0c;然后进入到项目目录 2.进入到项目目录&#xff0c;然后进行git的初始化 成功后本地项目目录内会多出一个“.git”文件&#xff1a; 指令介绍&#xff1a; git init -- 建立本地仓库 3.在码云上创建仓库&#xff0c;名为“MyMoney” 创建过程参考&…

2024最新Win系统下VSCode下载安装与配置C/C++教程

2024最新Win系统下VSCode下载安装与配置C/C教程 文章目录 2024最新Win系统下VSCode下载安装与配置C/C教程1、下载安装VSCode2、安装运行时环境GCGC的环境配置 3、安装VSCode插件4、配置程序调试环境4.1确定文件存储路径4.2新建文件夹【.vscode】4.3在.vscode文件夹里新建四个配…

【前端学习——js篇】5.事件循环

详细&#xff1a;https://github.com/febobo/web-interview 5.事件循环 js是一种单线程语言&#xff0c;同一时间内只能做一件事情&#xff0c;为了避免单线程阻塞的方法就是事件循环。 在javascript当中&#xff0c;所有的任务都可以分为&#xff1a; 同步任务&#xff1a;按…

Linux 系统 docker搭建LNMP环境

1、安装nginx docker pull nginx (默认安装的是最新版本) 2、运行nginx docker run --name nginx -p 80:80 -d nginx:latest 备注&#xff1a;--name nginx 表示容器名为 nginx -d 表示后台运行 -p 80:80 表示把本地80端口绑定到Nginx服务端的 80端口 nginx:lates…

基于51单片机的拔河游戏Proteus仿真

地址&#xff1a;https://pan.baidu.com/s/18LMEo-_WYcoyTOkWYJ0NUg 提取码&#xff1a;1234 仿真图&#xff1a; 1&#xff09;设计一个能进行拔河游戏的电路&#xff0c;通过按键控制游戏开始和复位。 2&#xff09;电路使用9个发光二极管排成一行&#xff0c;中间的LED为拔…

第二百二十八回

文章目录 1. 概念介绍2. 修改方法2.1 修改形状2.2 修改颜色2.3 修改位置 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何创建以图片为背景的页面"相关的内容&#xff0c;本章回中将介绍如何修改按钮的形状.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

动态规划课堂7-----两个数组的dp问题(等价代换)

目录 引言&#xff1a; 例题1&#xff1a;最长公共子序列 例题2&#xff1a;不同的子序列 例题3&#xff1a;通配符匹配 例题4&#xff1a;正则表达式 结语&#xff1a; 引言&#xff1a; 本节我们就要进入两个数组的dp问题的学习&#xff0c;通过前面几个章节的学习&…

终于来了!FastGPT 正式兼容 GPT 应用

终于来了&#xff01;FastGPT 正式兼容 GPT 应用 FastGPT V4.7 正式加入了工具调用功能&#xff0c;可以兼容 GPTs 的 Actions。这意味着&#xff0c;你可以直接导入兼容 GPTs 的 Agent 工具&#xff01; Gapier 是一组无需编码&#xff0c;开箱可用的&#xff0c;并且已经适配…

快速入门go语言

环境搭建 编译器安装 1、编译器下载地址 2、打开命令行模式&#xff0c;输入go version ide安装 ide下载地址 依赖管理 goproxy 1、goproxy代理地址 // 阿里云 https://mirrors.aliyun.com/goproxy // 微软 https://goproxy.io // 七牛 https://goproxy.cn 2、ide配置g…

蚂蚁庄园今日答案

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…

UG NX二次开发(C#)-通过曲线组生成NURBS曲面

文章目录 1、前言2、UG NX中通过曲线组生成NURBS曲面的操作3、采用NXOpen C#方法的源代码1、前言 在UG NX中,曲线、曲面的操作使用比较多,对于创建NURBS曲面,可以通过曲线组来生成,本文以NXOpen C#的方法实现通过曲线组生成NURBS曲面的功能。对于UG NX二次开发感兴趣或者有…