Advertisement

Flume简介及安装配置

阅读量:

一 Flume的简介

1.1 大数据处理流程

在企业中,大数据的处理流程一般是:

  • 1.数据采集
  • 2.数据存储
  • 3.数据清洗
  • 4.数据分析
  • 5.数据展示

参考下图:
在这里插入图片描述

在数据采集和搜集的工具中,Flume框架占有一定的市场份量。

1.2 Flume的简介

Flume是一种分布式的,可靠的、高可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。

参考官网: http://flume.apache.org/

Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.

flume 最开始是由 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。但随着 flume 功能的扩展,flume的代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点渐渐暴露出来,尤其是在发行版本 0.9.4中,日志传输不稳定的现象尤为严重。

为了解决这些问题,2011 年 10 月 22 号,cloudera 对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,并将 Flume 纳入 apache 旗下,从cloudera Flume 改名为 Apache Flume。

1.3 版本区别

​ 为了与之前版本区分开,重构后的版本统称为 Flume NG(next generation) ,重构前的版本被统称为 Flume OG(original generation) ,Flume目前只有Linux系统的启动脚本,没有Windows环境的启动脚本。

二 Flume的体系结构

2.1 体系结构简介

Flume 的核心是 Agent。Flume是以agent为最小的独立单位。一个agent就是一个JVM。它是一个完整的数据收集工具,含有三个核心组件,分别是source、 channel、 sink。通过这些组件, Event 可以从一个地方流向另一个地方。如下图所示:
在这里插入图片描述

2.2 组件及其作用
复制代码
    - Client:
    	客户端,Client生产数据,在一个独立的线程中
    
    - Event: 
    	一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
    
    - Flow:
    	Event从源点到达目的点的迁移的抽象。
    
    - Agent: 
    	一个独立的Flume进程,在JVM中,包含组件Source、 Channel、 Sink。
    	每台机器一个agent,但是一个agent中可以包含多个sources和sinks。
    
    - Source: 
    	数据收集组件。source从Client收集数据,传递给Channel
    
    - Channel: 
    	管道,负责接收source端的数据,然后将数据推送到sink端。
    
    - Sink: 
    	负责从channel端拉取数据,并将其推送到持久化系统或者是下一个Agent。
    	
    - selector:
    	选择器,作用于source端,然后决定数据发往哪个目标。
    
    - interceptor:
    	拦截器,flume允许使用拦截器拦截数据。允许使用拦截器链,作用于source和sink阶段。	
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/XoeAuYLwUxyq13r5DP9lg4hn8C0M.png)

三 Flume的安装

3.1 安装和配置环境变量

3.1.1 准备软件包

复制代码
    将apache-flume-1.8.0-bin.tar.gz 上传到linux系统中的/root/soft/目录中
    
    

3.1.2 解压软件包

复制代码
    [root@zrclass01 soft]# pwd
    /root/soft
    [root@zrclass01 soft]# tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /usr/local/
    
    
    shell

3.1.3 更名操作

复制代码
    [root@zrclass01 soft]# cd /usr/local/
    [root@zrclass01 local]# mv apache-flume-1.8.0-bin/ flume
    
    
    shell

3.1.4 配置环境变量

复制代码
    [root@zrclass01 local]# vi /etc/profile
    ........省略..........
    export FLUME_HOME=/usr/local/flume
    export PATH=$FLUME_HOME/bin:$PATH
    
    # 加载环境变量
    [root@zrclass01 apps]# source /etc/profile
    
    
    shell

3.1.5 验证环境变量

复制代码
    [root@zrclass01 local]# flume-ng version
    Flume 1.8.0
    Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
    Revision: 99f591994468633fc6f8701c5fc53e0214b6da4f
    Compiled by denes on Fri Sep 15 14:58:00 CEST 2017
    From source with checksum fbb44c8c8fb63a49be0a59e27316833d
    
    
    shell

3.2 配置文件

复制代码
    [root@zrclass01 local]# cd flume/conf/
    [root@zrclass01 conf]# ll	  #查看里面是否有一个flume-env.sh.template文件
    [root@zrclass01 conf]# cp flume-env.sh.template flume-env.sh
    [root@zrclass01 conf]# vi flume-env.sh
    ........省略..........
    export JAVA_HOME=/usr/local/jdk
    ........省略..........
    
    
    shell

四 Flume的部署

4.1 数据模型

复制代码
    - 单一数据模型
    - 多数据流模型
    
    

4.1.1 单一数据模型

在单个 Agent 内由单个 Source, Channel, Sink 建立一个单一的数据流模型,如下图所示,整个数据流为 Web Server --> Source --> Channel --> Sink --> HDFS。
在这里插入图片描述

4.1.2 多数据流模型

**1)**多 Agent 串行传输数据流模型
在这里插入图片描述
**2)**多 Agent 汇聚数据流模型
在这里插入图片描述
**3)**单 Agent 多路数据流模型
在这里插入图片描述
**4)**Sinkgroups 数据流模型
在这里插入图片描述

4.1.3 小总结

复制代码
    在flume提供的数据流模型中,几个原则很重要。
    
    Source--> Channel
单个Source组件可以和多个Channel组合建立数据流,既可以replicating 和 multiplexing。
多个Sources可以写入单个 Channel
    
    Channel-->Sink
多个Sinks又可以组合成Sinkgroups从Channel中获取数据,既可以loadbalancing和failover机制。
多个Sinks也可以从单个Channel中取数据。
单个Sink只能从单个Channel中取数据
    
    根据上述 5 个原则,你可以设计出满足你需求的数据流模型。
    
    
    properties
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/fDqQ7Vw0MHAGXKWNBbaj8yolrE5P.png)

4.2 配置介绍

4.2.1 定义组件名称

要定义单个代理中的流,您需要通过通道链接源和接收器。您需要列出给定代理的源,接收器和通道,然后将源和接收器指向一个通道。一个源实例可以指定多个通道,但是一个接收器实例只能指定一个通道。格式如下:

复制代码
    # list the sources, sinks and channels for the agent
    <Agent>.sources = <Source>
    <Agent>.sinks = <Sink>
    <Agent>.channels = <Channel1> <Channel2>
    
    # set channel for source
    <Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...
    
    # set channel for sink
    <Agent>.sinks.<Sink>.channel = <Channel1>
    
    
    properties
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/mXSKVT6LFgIYQy7OasqN0ewADbWz.png)

案例如下:

复制代码
    # list the sources, sinks and channels for the agent
    agent_foo.sources = avro-appserver-src-1
    agent_foo.sinks = hdfs-sink-1
    agent_foo.channels = mem-channel-1
    
    # set channel for source
    agent_foo.sources.avro-appserver-src-1.channels = mem-channel-1
    
    # set channel for sink
    agent_foo.sinks.hdfs-sink-1.channel = mem-channel-1
    
    
    properties
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/OK42ARjLNFMBGhJDC3cbTvazVHYx.png)

4.2.2 配置组件属性

复制代码
    # properties for sources
    <Agent>.sources.<Source>.<someProperty> = <someValue>
    
    # properties for channels
    <Agent>.channel.<Channel>.<someProperty> = <someValue>
    
    # properties for sinks
    <Agent>.sources.<Sink>.<someProperty> = <someValue>
    
    
    properties

案例如下:

复制代码
    agent_foo.sources = avro-AppSrv-source
    agent_foo.sinks = hdfs-Cluster1-sink
    agent_foo.channels = mem-channel-1
    
    # set channel for sources, sinks
    
    # properties of avro-AppSrv-source
    agent_foo.sources.avro-AppSrv-source.type = avro
    agent_foo.sources.avro-AppSrv-source.bind = localhost
    agent_foo.sources.avro-AppSrv-source.port = 10000
    
    # properties of mem-channel-1
    agent_foo.channels.mem-channel-1.type = memory
    agent_foo.channels.mem-channel-1.capacity = 1000
    agent_foo.channels.mem-channel-1.transactionCapacity = 100
    
    # properties of hdfs-Cluster1-sink
    agent_foo.sinks.hdfs-Cluster1-sink.type = hdfs
    agent_foo.sinks.hdfs-Cluster1-sink.hdfs.path = hdfs://namenode/flume/webdata
    
    #...
    
    
    properties
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/zftKwI9lQ6qrUT4BsFa5OcXPe8gH.png)

4.3 常用的source和sink种类

4.3.1 常用的flume sources

复制代码
    # Avro source:
    	avro
    # Syslog TCP source:
    	syslogtcp
    # Syslog UDP Source:
    	syslogudp
    # HTTP Source:
    	http	
    # Exec source:
    	exec
    # JMS source:
    	jms
    # Thrift source:
    	thrift	
    # Spooling directory source:
    	spooldir
    # Kafka source:
    	org.apache.flume.source.kafka,KafkaSource
    .....	
    
    
    shell
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/eSJ31Hz9qvk5agER2hODctdnlwZT.png)

4.3.2 常用的flume channels

复制代码
    # Memory Channel
    	memory
    # JDBC Channel
    	jdbc
    # Kafka Channel
    	org.apache.flume.channel.kafka.KafkaChannel
    # File Channel
    	file
    
    
    shell

4.3.3 常用的flume sinks

复制代码
    # HDFS Sink
    	hdfs
    # HIVE Sink
    	hive
    # Logger Sink
    	logger
    # Avro Sink
    	avro
    # Kafka Sink
    	org.apache.flume.sink.kafka.KafkaSink
    # Hbase Sink
    	hbase
    
    
    shell
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/491yInFzaomKWMeVxOsRB7YvfCTL.png)

全部评论 (0)

还没有任何评论哟~