Flume入门案例小笔记

Flume监控端口数据小案例

案例目的 使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。
在这里插入图片描述

实现步骤

安装netcat工具,netcat所做的就是在两台电脑之间建立链接并返回两个数据流,具体用法可见:Linux Netcat 命令——网络工具中的瑞士军刀

sudo yum install -y nc 

判断44444端口是否被占用

sudo netstat -tunlp | grep 44444 

创建 Flume Agent 的配置文件 flume-netcat-logger.conf

cd /usr/local/flume
mkdir job
cd job
vi flume-netcat-logger.conf
# Name the components on this agent 
a1.sources = r1 
a1.sinks = k1 
a1.channels = c1 
 
# Describe/configure the source 
a1.sources.r1.type = netcat 
a1.sources.r1.bind = localhost 
a1.sources.r1.port = 44444 
 
# Describe the sink 
a1.sinks.k1.type = logger 
 
# Use a channel which buffers events in memory 
a1.channels.c1.type = memory 
a1.channels.c1.capacity = 1000 
a1.channels.c1.transactionCapacity = 100 

# Bind the source and sink to the channel 
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1

运行

cd /usr/local/flume
#启动flume监听
bin/flume-ng agent -c conf/ -n a1 -f job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

重开一个终端,使用 netcat 工具向本机的 44444 端口发送内容

nc localhost 44444 

在这里插入图片描述

在 Flume 可以监听到发送的内容

在这里插入图片描述

Flume实时监控单个追加文件

案例目的 实时监控单个文件的数据,并上传到 HDFS 中(不要忘记启动hadoop)
在这里插入图片描述

实现步骤

Flume 要想将数据输出到 HDFS,须持有 Hadoop 相关 jar 包 ,需要将以下jar包

commons-configuration-1.6.jar
hadoop-auth-2.7.7.jar
hadoop-common-2.7.7.jar
hadoop-hdfs-2.7.7.jar
commons-io-2.4.jar
htrace-core-3.1.0.jar

拷贝到/usr/local/flume/lib文件夹下

创建 Flume Agent 配置文件 flume-file-hdfs.conf

cd /usr/local/flume/job
vi flume-file-hdfs.conf 
# Name the components on this agent 
a2.sources = r2 
a2.sinks = k2 
a2.channels = c2 
 
# Describe/configure the source 
a2.sources.r2.type = exec 
a2.sources.r2.command = tail -F ~/flumetest1.txt 
a2.sources.r2.shell = /bin/bash -c 
 
# Describe the sink 
a2.sinks.k2.type = hdfs 
a2.sinks.k2.hdfs.path = hdfs://Master:9000/flume/%Y%m%d/%H 
a2.sinks.k2.hdfs.filePrefix = logs- 
a2.sinks.k2.hdfs.round = true  
a2.sinks.k2.hdfs.roundValue = 1  
a2.sinks.k2.hdfs.roundUnit = hour  
a2.sinks.k2.hdfs.useLocalTimeStamp = true  
a2.sinks.k2.hdfs.batchSize = 1000 
a2.sinks.k2.hdfs.fileType = DataStream 
a2.sinks.k2.hdfs.rollInterval = 30 
a2.sinks.k2.hdfs.rollSize = 134217700 
a2.sinks.k2.hdfs.rollCount = 0 
 
# Use a channel which buffers events in memory 
a2.channels.c2.type = memory 
a2.channels.c2.capacity = 1000 
a2.channels.c2.transactionCapacity = 100 
 
# Bind the source and sink to the channel 
a2.sources.r2.channels = c2 
a2.sinks.k2.channel = c2

运行

cd /usr/local/flume

bin/flume-ng agent --conf conf/ --name a2 --conf-file job/flume-file-hdfs.conf

在这里插入图片描述
打开另一个终端,添加数据内容到flumetest1.txt中
在这里插入图片描述
打开hadoop的web 监控界面中可以查看到相应数据在hdfs文件系统中的更新
在这里插入图片描述
这里演示了一个使用flume监控单个追加文件的小案例,我们可以利用这种机理来监控一些日志文件,比如hive的日志文件。

Flume实时监控目录下多个新文件

案例目的 使用 Flume 监听整个目录的文件,并上传至 HDFS (不要忘记启动hadoop)
在这里插入图片描述

实现步骤

创建 flume-dir-hdfs.conf 配置文件(配置项已附上说明)

cd /usr/local/flume/job
vim flume-dir-hdfs.conf 
#定义source、channels和sinks
a3.sources = r3 
a3.sinks = k3 
a3.channels = c3 
 
#描述和配置source 
a3.sources.r3.type = spooldir #定义source类型为目录
a3.sources.r3.spoolDir = ~/test1 #定义监控目录
a3.sources.r3.fileSuffix = .COMPLETED #定义文件上传后的后缀名
a3.sources.r3.ignorePattern = ([^ ]*\.tmp) #忽略所有以.tmp 结尾的文件,不上传 
 
#描述sink 
a3.sinks.k3.type = hdfs #sink类型为hdfs
a3.sinks.k3.hdfs.path = hdfs://Master:9000/flume/upload/%Y%m%d/%H #输出到何处 
a3.sinks.k3.hdfs.filePrefix = upload- #上传文件的前缀 
a3.sinks.k3.hdfs.round = true #是否按照时间滚动文件夹 
a3.sinks.k3.hdfs.roundValue = 1 #多少时间单位创建一个新的文件夹 
a3.sinks.k3.hdfs.roundUnit = hour #重新定义时间单位 
a3.sinks.k3.hdfs.useLocalTimeStamp = true #是否使用本地时间戳
a3.sinks.k3.hdfs.batchSize = 100 #积攒多少个 Event 才 flush 到 HDFS 一次 
a3.sinks.k3.hdfs.fileType = DataStream #设置文件类型,可支持压缩 
a3.sinks.k3.hdfs.rollInterval = 60  #多久生成新文件
a3.sinks.k3.hdfs.rollSize = 134217700  #多大生成新文件
a3.sinks.k3.hdfs.rollCount = 0 #生成新文件和event无关
 
#描述channels 
a3.channels.c3.type = memory 
a3.channels.c3.capacity = 1000 
a3.channels.c3.transactionCapacity = 100 
 
#绑定source和sink到channel 
a3.sources.r3.channels = c3 
a3.sinks.k3.channel = c3 

启动监控命令

cd /usr/local/flume
bin/flume-ng agent --conf conf/ --name a3 --conf-file job/flume-dir-hdfs.conf 

向监控的test1文件夹添加文件

touch atguigu.txt 
touch atguigu.tmp
touch atguigu.log

ll一下test1文件夹,查看其文件的后缀名是否发生变化

cd test1
ll

在这里插入图片描述
查看 HDFS 上相应目录上的数据变化
在这里插入图片描述

### 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、付费专栏及课程。

余额充值