首页 > 其他分享 >Flume超级无敌详细讲解

Flume超级无敌详细讲解

时间:2024-03-24 19:00:45浏览次数:17  
标签:Flume flume 1.11 流动 无敌 a1 Source 讲解

简介

概述

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 = s1

a1.channels = c1

a1.sinks = k1



# 配置AVRO Source

# 类型必须是avro

a1.sources.s1.type = avro

# 绑定要监听的主机

a1.sources.s1.bind = 0.0.0.0

# 绑定要监听的端口

a1.sources.s1.port = 8090



a1.channels.c1.type = memory



a1.sinks.k1.type = logger



a1.sources.s1.channels = c1

a1.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 = s1

a1.channels = c1

a1.sinks = k1



# 配置Exec Source

# 类型必须是exec

a1.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 -c



a1.channels.c1.type = memory



a1.sinks.k1.type = logger



a1.sources.s1.channels = c1

a1.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

添加如下配置:

标签:Flume,flume,1.11,流动,无敌,a1,Source,讲解
From: https://blog.csdn.net/m0_51388399/article/details/136958687

相关文章

  • 【保姆级讲解C语言中的运算符的优先级】
    ......
  • 毕业设计3489基于微信小程序的就业管理系统设计与实现【源代码+文档+调试+讲解视频】
    摘要本文旨在介绍一个基于微信小程序的就业管理系统的设计与实现。该系统通过服务器端和客户端两种用户角色,实现了个人用户管理、企业管理、就业指导管理、职位管理以及系统管理等功能。同时,系统提供了用户友好的界面设计和便捷的操作体验,为求职者和企业提供了一个高效、便......
  • 基于SpringBoot+Vue的健身教练预约管理系统(源码+文档+部署+讲解)
    毕设帮助、定制开发、源码交流联系方式见文末。一.系统概述私人健身与教练预约管理系统,可以摆脱传统手写记录的管理模式。利用计算机系统,进行用户信息、管理员信息的管理,其中包含首页,个人中心,用户管理,教练管理,健身项目管理,项目分类,教练信息管理,教练预约管理,系统管理等功......
  • 基于SpringBoot+Vue的付费自习室管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 基于SpringBoot+Vue的单位考勤系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 基于Java的二手车交易平台设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 基于SpringBoot+Vue医疗管理系统设计和实现(源码+LW+部署讲解)
    博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs......
  • 基于SpringBoot+Vue新闻管理系统设计和实现(源码+LW+部署讲解)
    博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs......
  • Java 枚举(超详细讲解)
    Java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序的编程效率和质量。一、枚举事先考虑到某一变量可能的取值,尽可能用自然语言忠表意清楚的单词来表示它的每一个值,用这中思路定义的类型被称为枚举类型。枚举事由一组固定的常量组成的类型。在Java中每个枚......
  • C语言for循环详细讲解
    引言:在上一篇博客中,我们介绍了关于C语言的一种循环,while循环,并介绍了其中的关键字及其例题,在本片帖子,我们将引入一种新的循环方式,名为for循环,那么它与while循环又有哪些相似之处和不同之处呢?让我们一起来探索一下。一.for循环的基本架构for循环时三种循环中使用最多的for循......