Flume入门之helloworld

本文介绍Flume——一个高可用、高可靠、分布式的海量日志采集系统。Flume支持灵活简单的流式架构,能够实时读取服务器本地磁盘的数据,并将其写入HDFS。文章详细解释了FlumeAgent的架构,包括源(Source)、通道(Channel)和接收器(Sink)等核心组件的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flume简介

Flume 是Cloudera 提供一个高可用的,高可靠的,分布式海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。

为什么选用Flume

Flume 最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入到HDFS。

Flume Agent架构

输入叫作源(Source)

输出叫作接收器(Sink)

通道(Channel)提供了Source与Sink之间的胶水

它们都运行在叫作代理(Agent)的守护进程中。

下面是Apache Flume官网提供的架构图,与上图对比。

总结:

源(Source)将事件(Event)写到一个或多个通道(Channel)中。

通道(Channel)作为事件(Event)从源(Source)到接收器(Sink)传递的保留区。

接收器(Sink)只从一个通道(Channel)接收事件(Event)。

代理可能会有多个源、通道、接收器。

Flume事件

Flume传输的基本的数据负载叫作事件(Event)。事件由0个或多个头与体组成。头是一些键值对,可用于路由判断或者承载其他的结构化信息(比如事件的时间戳或是发出事件的服务器主机名)。

 

Flume从"Hello World开始"

agent1.sources=s1
agent1.channels=c1
agent1.sinks=k1

# 源
agent1.sources.s1.type=netcat
agent1.sources.s1.channels=c1
agent1.sources.s1.bind=0.0.0.0
agent1.sources.s1.port=12345

# 内存通道
agent1.channels.c1.type=memory

# 配置接收器的类型为logger,用于调试与测试。使用log4j将所有info级别的日志记录下来。
agent1.sinks.k1.type=logger
# 一个接收器只能从一个通道接收数据
agent1.sinks.k1.channel=c1

启动flume

bin]# ./flume-ng agent -n agent1 -c conf  -f ../conf/flume.conf -Dflume.root.logger=INFO,console

安装nc:yum install -y nc

>nc localhost 12345

hello

可以在flume控制台看到接收到的数据hello

 

### Apache Flume 入门教程 Apache Flume 是一个分布式、可靠且高可用的系统,用于从多个来源高效地收集、聚合和移动大量日志数据到集中式存储系统(如 HDFS 或 Kafka)。以下是关于 Apache Flume入门知识。 #### 1. Flume 的基本架构 Flume 的核心组件包括 **Source**、**Channel** 和 **Sink**。 - **Source**: 数据的输入端,负责接收外部数据并将其转换为 Flume 的事件格式[^4]。 - **Channel**: 数据的缓冲区,用于暂存从 Source 接收到的数据,直到 Sink 将其写入目标位置。常见的 Channel 类型有 Memory Channel 和 File Channel[^3]。 - **Sink**: 数据的输出端,负责将数据写入目标存储系统,例如 HDFS、Kafka 或其他系统[^4]。 #### 2. 安装与配置 以下是安装和配置 Flume 的基本步骤: ##### (1) 解压 Flume 压缩包 使用以下命令解压 Flume 的压缩包,并重命名目录: ```bash tar -zxvf apache-flume-1.9.0-bin.tar.gz -C ../servers/ mv apache-flume-1.9.0-bin/ flume-1.9.0 ``` 此步骤将 Flume 解压到指定目录并重命名以方便管理[^2]。 ##### (2) 配置环境变量 编辑 `flume-env.sh.template` 文件并重命名为 `flume-env.sh`,然后设置必要的环境变量: ```bash # Enviroment variables can be set here. export JAVA_HOME=/path/to/java export FLUME_CLASSPATH="/path/to/flume/lib" ``` 确保正确设置 `JAVA_HOME` 和 `FLUME_CLASSPATH` 变量[^3]。 #### 3. 配置文件示例 Flume 的配置文件通常位于 `conf` 目录下。以下是一个简单的配置文件示例,展示如何从标准输入读取数据并写入控制台: ```properties # 定义 agent 的名称 agent.sources = source1 agent.sinks = sink1 agent.channels = channel1 # 配置 Source agent.sources.source1.type = exec agent.sources.source1.command = tail -F /var/log/system.log # 配置 Channel agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 # 配置 Sink agent.sinks.sink1.type = logger # 绑定 Source 和 Channel agent.sources.source1.channels = channel1 # 绑定 Sink 和 Channel agent.sinks.sink1.channel = channel1 ``` #### 4. 启动 Flume 启动 Flume 时需要指定配置文件: ```bash bin/flume-ng agent --conf conf/ --name agent --conf-file example.conf -Dflume.root.logger=INFO,console ``` 此命令将启动名为 `agent` 的 Flume 实例,并加载指定的配置文件[^3]。 #### 5. 数据流示例 假设需要从文件中读取日志数据并写入 HDFS: ```properties # 定义 Source agent.sources.source1.type = spooldir agent.sources.source1.spoolDir = /path/to/spool/directory # 定义 Sink agent.sinks.sink1.type = hdfs agent.sinks.sink1.hdfs.path = hdfs://namenode:8020/user/flume/logs agent.sinks.sink1.hdfs.fileType = DataStream ``` #### 6. 常见 Source 和 Sink 类型 - **Source 类型**: Avro Source、Exec Source、Spooling Directory Source、NetCat Source 等[^4]。 - **Sink 类型**: Logger Sink、Avro Sink、HDFS Sink、Kafka Sink 等。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值