Ubuntu安装flume

可以。Flume 是## 目录

  • [1. 检查 HDFS](#1. 检查 HDFS)
  • [2. 下载安装包](#2. 下载安装包)
  • [3. 配置 Java 和 Hadoop 依赖](#3. 配置 Java 和 Hadoop 依赖)
  • [4. 配置采集任务](#4. 配置采集任务)
  • [5. 分发到两个 worker](#5. 分发到两个 worker)
  • [6. 创建目录](#6. 创建目录)
  • [7. 启动采集](#7. 启动采集)
  • [8. 放入测试文件](#8. 放入测试文件)
  • [9. 检查采集结果](#9. 检查采集结果)
  • [10. 测试成功后改为后台运行](#10. 测试成功后改为后台运行)

日志采集工具,在哪台机器采集日志,就在哪台运行 Agent。它不通过 YARN 启动。

下面搭建:

text 复制代码
worker1 本地文件 → Flume → HDFS
worker2 本地文件 → Flume → HDFS

master 不需要运行 Flume ,负责管理已有的 HDFS。选择 Flume 1.11.0 ,先沿用 Java 11;与现有 Hadoop 3.4.3 的组合通过最后的写入测试验证。官方安装包、使用文档

1. 检查 HDFS

在 master 执行:

bash 复制代码
hdfs dfsadmin -report

确认有两个 Live DataNode。未启动时执行:

bash 复制代码
start-dfs.sh

本次实验不需要启动 YARN、Kafka、HBase 或 ZooKeeper。

创建输出目录:

bash 复制代码
hdfs dfs -mkdir -p /user/dyl/flume

2. 下载安装包:在 master 执行

bash 复制代码
mkdir -p ~/software
cd ~/software

wget -c https://downloads.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz

wget https://downloads.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz.sha512

检查:

bash 复制代码
sha512sum apache-flume-1.11.0-bin.tar.gz
cat apache-flume-1.11.0-bin.tar.gz.sha512

校验值一致后,解压到尚未安装其他版本的目录:

bash 复制代码
mkdir -p /home/dyl/flume

tar -xzf apache-flume-1.11.0-bin.tar.gz \
  -C /home/dyl/flume --strip-components=1

3. 配置 Java 和 Hadoop 依赖:在 master 执行

bash 复制代码
nano /home/dyl/flume/conf/flume-env.sh

填入:

bash 复制代码
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export JAVA_OPTS="-Xms128m -Xmx256m"

export HADOOP_HOME=/home/dyl/hadoop-3.4.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export FLUME_CLASSPATH="$HADOOP_CONF_DIR:$($HADOOP_HOME/bin/hadoop classpath)"

保存:Ctrl+O → 回车 → Ctrl+X。

这里通过类路径引用 Hadoop 客户端依赖,先不要往 Flume 的 lib 中手动复制整套 Hadoop JAR。

4. 配置采集任务:在 master 执行

bash 复制代码
nano /home/dyl/flume/conf/spool-to-hdfs.conf

填入:

properties 复制代码
a1.sources = r1
a1.channels = c1
a1.sinks = k1

# 读取本地目录中新放入的完整文件
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/dyl/flume-spool
a1.sources.r1.fileSuffix = .COMPLETED
a1.sources.r1.deserializer = LINE
a1.sources.r1.deserializer.maxLineLength = 100000
a1.sources.r1.channels = c1

# 添加采集机器名称,便于区分输出目录
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = host
a1.sources.r1.interceptors.i1.hostHeader = host
a1.sources.r1.interceptors.i1.useIP = false

# 使用本地磁盘暂存事件
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /home/dyl/flume-channel/checkpoint
a1.channels.c1.dataDirs = /home/dyl/flume-channel/data
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 1000

# 写入 HDFS
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = hdfs://master:9000/user/dyl/flume/%{host}/%Y-%m-%d
a1.sinks.k1.hdfs.filePrefix = events
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text
a1.sinks.k1.hdfs.useLocalTimeStamp = true

# 小规模实验:定期关闭文件,便于查看
a1.sinks.k1.hdfs.rollInterval = 30
a1.sinks.k1.hdfs.rollSize = 0
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.idleTimeout = 10
a1.sinks.k1.hdfs.batchSize = 100

这是"完整文件采集",不是持续追加日志的采集方式。正在不断写入的日志文件,后面应改用 Taildir Source。

5. 分发到两个 worker:在 master 执行

bash 复制代码
scp -r /home/dyl/flume dyl@worker1:/home/dyl/
scp -r /home/dyl/flume dyl@worker2:/home/dyl/

这里只分发程序和配置。两个 worker 将分别保存自己的采集进度和 File Channel 数据。

6. 创建目录:在两个 worker 分别执行

bash 复制代码
mkdir -p /home/dyl/flume-spool
mkdir -p /home/dyl/flume-channel/checkpoint
mkdir -p /home/dyl/flume-channel/data
mkdir -p /home/dyl/flume/logs

检查 Java 和 HDFS 访问:

bash 复制代码
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -version

/home/dyl/hadoop-3.4.3/bin/hdfs dfs -ls /user/dyl/flume

第二条命令没有报错即可,目录目前可能是空的。

7. 启动采集:两个 worker 分别执行

先以前台方式运行,方便观察问题:

bash 复制代码
/home/dyl/flume/bin/flume-ng agent \
  --conf /home/dyl/flume/conf \
  --conf-file /home/dyl/flume/conf/spool-to-hdfs.conf \
  --name a1 \
  -Dflume.root.logger=INFO,console

正常情况下它会一直运行,不会自动退出。 不要在同一台机器上重复启动同一套配置。

8. 放入测试文件

另开一个 worker1 连接,执行:

bash 复制代码
TEST_FILE=$(mktemp /home/dyl/flume-test-XXXXXX)

printf 'worker1: hello flume\nworker1: hello hdfs\n' > "$TEST_FILE"

mv "$TEST_FILE" /home/dyl/flume-spool/

在 worker2 的另一个连接执行:

bash 复制代码
TEST_FILE=$(mktemp /home/dyl/flume-test-XXXXXX)

printf 'worker2: hello flume\nworker2: hello cluster\n' > "$TEST_FILE"

mv "$TEST_FILE" /home/dyl/flume-spool/

先在外面写完文件,再移动进采集目录,避免 Flume 读到仍在写入的文件。

文件放进去后不要再修改,也不要重复使用同名文件。 这是 Spooldir 的使用要求。官方 Spooldir 说明

9. 检查采集结果

在两个 worker 查看:

bash 复制代码
ls -la /home/dyl/flume-spool

文件被读取进入 Channel 后,通常会加上 .COMPLETED 后缀;这只说明 Source 读取完成,还需检查 HDFS 写入结果。

等待约 30 秒,在 master 执行:

bash 复制代码
hdfs dfs -ls -R /user/dyl/flume

读取结果:

bash 复制代码
hdfs dfs -cat '/user/dyl/flume/*/*/events*'

应看到来自两个 worker 的测试内容。输出目录会按采集机器名称和日期区分。

10. 测试成功后改为后台运行

先在两个 worker 的前台采集窗口按 Ctrl+C,等待退出,再分别执行:

bash 复制代码
nohup /home/dyl/flume/bin/flume-ng agent \
  --conf /home/dyl/flume/conf \
  --conf-file /home/dyl/flume/conf/spool-to-hdfs.conf \
  --name a1 \
  -Dflume.root.logger=INFO,console \
  > /home/dyl/flume/logs/agent.out 2>&1 &

echo $! > /home/dyl/flume/logs/agent.pid

查看日志:

bash 复制代码
tail -n 50 /home/dyl/flume/logs/agent.out

停止本次启动的 Agent:

bash 复制代码
kill "$(cat /home/dyl/flume/logs/agent.pid)"

以后先启动 HDFS,再启动两个 Flume Agent;停止时先停 Flume,再停 HDFS。 不要删除 File Channel 目录或采集进度来解决报错。

相关推荐
承渊政道33 分钟前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.4 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落5 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨5 小时前
WSL2的安装与使用
linux·wsl
微小的鱼5 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng6 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮6 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Linux-lucky18 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
禁默18 小时前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu