点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
目前2025年06月13日更新到: AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书,持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年06月11日更新到: Java-44 深入浅出 Nginx - 底层进程机制 Master Worker 机制原理 常用指令 MyBatis 已完结,Spring 已完结,深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 目前2025年06月13日更新到: 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

章节内容
上一节我们完成了:
- HiveServer2 的介绍和配置安装
- 修改 core-size hdfs-site 实现集群的启动
- Beeline 简单上手
- HCatalog 简单上手
背景介绍
这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。
- 2C4G 编号 h121
- 2C4G 编号 h122
- 2C2G 编号 h123

Flume 简介
Flume 是一个分布式
,高可靠
,高可用
的海量日志采集、聚合、传输的系统。 Flume 支持在日志系统中定制各类数据发送方,用于采集数据
。 Flume 提供对数据进行简单处理
,并写到各种数据接收方的能力。
简单概括:
Flume是实时采集日志
的数据采集引擎。它有三个重要的组件概念:
- Source
- Channel
- Sink
他们之间的关系如下图表示:
核心概念
Flume 的设计基于"流(Flow)"的思想,一个完整的数据流由多个组件协作完成,主要包括:
Event
- Flume 中传输的数据单元,称为事件(Event),由两部分组成:
- Header(头部,键值对)
- Body(内容,字节数组,通常是日志文本)
Agent
- 是 Flume 的运行实例,负责数据的接收、处理和输出。
- 一个 Agent 包含三个关键组件:
- Source(源):用于接收数据(如:syslog、HTTP、exec、Spooling Directory 等)
- Channel(通道):用于在 Source 和 Sink 之间缓存数据(如:内存通道、文件通道、Kafka 通道)
- Sink(汇):将数据写入目标系统(如:HDFS、HBase、Kafka)
Interceptor
- 插入在 Source 和 Channel 之间的"拦截器",用于处理或修改 Event,比如:
- 增加 Header
- 内容过滤
- 数据清洗
Channel Selector & Sink Processor
- 当一个 Source 对接多个 Channel,需要用 Channel Selector 决定分发逻辑。
- Sink Processor 则可以实现负载均衡、容错等高级功能(比如负载轮询、故障转移等)。
Flume 的数据流模式
Flume 支持多种拓扑结构来实现灵活的数据流传输:
- 单 Agent 模式:简单稳定,适合单机收集日志。
- 多 Agent 模式(级联):
- 上游 Agent 的 Sink 向下游 Agent 的 Source 发数据。
- 用于跨节点、跨数据中心传输。
常见 Source
- exec:执行 shell 命令并读取标准输出(如 tail -F)
- spooldir:监控目录中新文件(适合脱机日志收集)
- netcat:基于 TCP 的简易调试型 source
- avro:跨 Agent 通信的默认方式
- http:接收 HTTP POST 请求
常见 Sink
- hdfs:写入 HDFS,支持滚动写入、压缩等
- logger:打印日志,主要用于调试
- file_roll:写入本地文件,类似日志归档
- avro:用于向下游 Agent 发送 Event
- kafka:支持将日志写入 Kafka 供实时分析使用
Flume特点
- 分布式:Flume
分布式集群
部署,扩展性好
- 可靠性好:当节点出现
故障时
,日志能够被传送到其他节点
上而不会丢失 - 易用性:Flume配置
使用繁琐
,对使用人员专业度要求高
- 实时采集:Flume
采集流模式
对数据进行实时采集
类似工具
DataX
阿里异构数据源同步工具Kettle
开源ETLLogStash
应用程序日志、事件的传输、处理、管理和搜索的平台Scribe
FaceBook 开源的日志收集系统
使用场景
- 网站日志收集(如 Nginx、Tomcat 日志)
- 移动应用埋点日志归集
- 服务器操作系统日志集中式处理
- 配合 Hadoop 系统做离线分析
Flume架构

Agent
本质上一个JVM进程
,该JVM进程控制Event数据流
从外部日志生产者传输到目的地
,或
是下一个Agent
。 一个完整的Agent
中包含了三个完整的组件
:Source、Channel、Sink。 Source
是指数据的来源方式,Channel
是一个数据缓冲池,Sink
定义了数据输出的方式和目的地。
Source
负责接受数据到 Flume Agent的组件。Source
组件可以处理各种类型
,各种格式
的日志数据。
Channel
为了Source和Sink
之间的缓冲
,Channel允许Source和Sink运作在不同的速率上。
Channel
是线程安全
的,可以同时
处理多个Source
写入操作以及多个SInk
的读取操作。
常见的Channel
如下:
Memory Channel
是内存中的队列。Memory Channel在允许数据丢失的情况下使用File Channel
将所有事件都写到磁盘。
Sink
不断地轮询
Channel中的事件并且批量的移除它们,将这些事件批量写入存储或者索引系统,或者被发送到另一个Agent。
Event
是Flume定义的是一个数据流
传输的最小单位
。
Flume拓扑
串行模式
将
多个 Flume
结合起来,从最初的Source到最终Sink。 此模式不建议过多
的Flume,过多不仅会影响传输速率,而且一旦传输过程中某个节点宕机
,会影响整个系统。
复制模式
将事件流向
一个或者多个
目的地,这种模式将数据源复制到多个Channel
中,每个Channel都有相同的数据,Sink可以选择传入不同的目的地。
负载均衡
多个 Sink
逻辑上划分到一个Sink组
,Flume将数据发送到不同的Sink上。
Flume内部原理

- Source接受事件,交给其Channel处理
- 处理器通过拦截器 Interceptor,对事件进行处理,比如压缩解码、正则拦截、时间戳
- 经过拦截的事件再传给Channel选择器,将事件写入相应的Channel。
- 最后由Sink处理各个Channel事件。
项目下载
下载Flume
这里我选择:1.9.0
shell
http://archive.apache.org/dist/flume/
使用 wegt 下载,或者 你现在好传到服务器上。我传到了 h122 机器上。
shell
h122 /opt/software/
上传后进行解压
shell
cd /opt/software
tar zxvf apache-flume-1.9.0-bin.tar.gz -C ../servers/
cd ../servers
ls
环境变量
修改配置文件
shell
vim /etc/profile
写入如下的内容:
shell
# flume
export FLUME_HOME=/opt/servers/apache-flume-1.9.0-bin
export PATH=$PATH:$FLUME_HOME/bin
写入的内容如下图: 刷新配置文件即可。
配置文件
shell
cd $FLUME_HOME/conf
mv flume-env.sh.template flume-env.sh
vim flume-env.sh
把 JAVA_HOME
配置进去,防止出错。
shell
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
配置的结果如下图: 至此!Flume的安装和配置已经完成!