Loading

Flume 数据采集工具安装与使用

Flume 的定义

  • Flume由Cloudera公司开发,是一个分布式、高可靠、高可用的海量日志采集、聚合、传输的系统。
  • Flume支持在日志系统中定制各类数据发送方,用于采集数据;
  • Flume提供对数据进行简单处理,并写到各种数据接收方的能力。

简单的说,Flume是实时采集日志的数据库引擎

image

Flume 组建

Flume有三个重要组件:Source、Channel、Sink

  • Source:数据接收的组件。处理各种类型、各个格式的日子数据。如:avro、exce、netcat。
  • Channel:位与Source与Sink之间的缓冲区。允许Source、Sink运行在不同的速率上。(线程安全,可以同时处理多个Source、Sink)
    • 常见的Channel:Memory Channel、File Channel
    • Memory Channel:内存 速度快、容量有限、容易丢数据
    • File Chenmel:文件 速度慢、容量大、不丢数据
  • Sink:不断的从Channel中取数据,发送到目的地。

Flume 的特点

特点:

  • 分布式:flume分布式集群部署,扩展性好
  • 可靠性好:当节点出现故障时,日志能够被传送到其他节点上而不会丢失
  • 易用性:flume配置使用较繁琐,对使用人员专业技术要求高
  • 实时采集:flume采集流模式进行数据实时采集

适用场景 :适用于日志文件实时采集。

Flume 安装

https://flume.apache.org/download.html
本文章使用的是 Flume1.9.0
安装节点是slave2

  1. 下载安装
# 下载Flume1.9.0
wget https://dlcdn.apache.org/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz -P /opt/software --no-check-certificate

# 解压至 /opt/servers
tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/servers

# 重命名
cd /opt/servers
mv apache-flume-1.9.0-bin flume-1.9.0
  1. 配置环境变量
    vim /etc/profile
# Flume 
export FLUME_HOME=/opt/servers/flume-1.9.0
export PATH=$PATH:$FLUME_HOME/bin

使其生效

source /etc/profile
  1. 拷贝配置模版
cd $FLUME_HOME/conf
cp flume-env.sh.template flume-env.sh
  1. 修改配置
    vim flume-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_202

简单案例

中文flume帮助文档
https://flume.liyifeng.org/

业务需求

监听本机 8888 端口,Flume将监听的数据实时显示在控制台
需求分析:
使用 telnet 工具可以向 8888 端口发送数据

  • 监听端口数据,选择 netcat source
  • channel 选择 memory
  • 数据实时显示,选择 logger sink

实现步骤

  1. 安装telnet工具
yum install telnet
  1. 检查8888端口是否被占用。如果该端口被占用,可以选择使用其他端口完成任务
lsof -i:8888
# 如果有进程占用
kill [PID]
  1. 创建Flume Agent配置文件。flume-netcat-logger.conf

https://flume.liyifeng.org/#netcat-tcp-source
https://flume.liyifeng.org/#memory-channel
https://flume.liyifeng.org/#logger-sink

mkdir ~/conf
vim ~/conf/flume-netcat-logger.conf

添加以下内容

# Agent  a1是Agent的名称,r1、c1、k1分别是source、channels、sink的名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1

# Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = slave2
a1.sources.r1.port = 8888

# Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000

# Sink
a1.sinks.k1.type = logger

# Source、Channel、Sink之间的关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

Memory Channel是使用内存缓冲Event的Channel实现。速度比较快速,容量会受到jvm内存大小的限制,可靠性不够高。适用于允许丢失数据,但对性能要求较高的日志采集业务。

  1. 启动Flume
flume-ng agent --name a1 \
--conf-file ~/conf/flume-netcat-logger.conf \
-Dflume.root.logger=INFO,console

image

  1. 发送数据
telnet slave 8888

image
收到数据并打印在终端上
image

监控日志文件信息到HDFS

业务需求:监控本地日志文件,收集内容实时上传到HDFS

需求分析:
使用tail-F命令即可找到本地日志文件产生的信息

  • source选择exec。exec监听一个指定的命令,获取命令的结果作为数据源。source组件从这个命令的结果中取数据。当agent进程挂掉重启后,可能存在数据丢失;
  • channel选择memory
  • sink选择HDFS
tail -f
等同于--follow=descripror,根据文件描述符进行追踪,当文件改名或被删除,追踪停止

tail -F
等同于--follow=name--retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪选择语言

操作步骤

1、环境准备。Flume要想将数据输出到HDFS,必须持有Hadoop相关jar包。将
commons-configuration-1.6.jar
hadoop-auth-2.10.1.jar
hadoop-common-2.10.1.jar
hadoop-hdfs-2.10.1.jar
commons-io-2.4.jar
htrace-core4-4.1.0-incubating.jar
拷贝到 $FLUME_HOME/lib文件夹下

cd $HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib
cp commons-configuration-1.6.jar $FLUME_HOME/lib
cp hadoop-auth-2.10.1.jar $FLUME_HOME/lib
cp hadoop-common-2.10.1.jar $FLUME_HOME/lib
cp hadoop-hdfs-2.10.1.jar $FLUME_HOME/lib
cp commons-io-2.4.jar $FLUME_HOME/lib
cp htrace-core4-4.1.0-incubating.jar $FLUME_HOME/lib 
  1. 创建配置文件
    vim ~/conf/flume-exec-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 /tmp/root/hive.log

# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 10000
a1.channels.c1.transactionCapacity = 10000

# 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.useLocalTimeStamp = true
# 积攒10000个Event才f1ush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 10000
# 设置文件类型,支持压缩。Datastream没启用压缩
a2.sinks.k2.hdfs.fileType = DataStream
# 1分钟滚动一次
a2.sinks.k2.hdfs.rollInterval = 60
# 128M滚动一次
a2.sinks.k2.hdfs.rollsize = 134217700
# 文件的滚动与Event数量无关
a2.sinks.k2.hdfs.rollCount = 0
# 最小见余数
a2.sinks.k2.hdfs.minBlockReplicas = 1

# Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
  1. 启动Flume
flume-ng agent --name a2 \
--conf-file ~/conf/flume-exec-hdfs.conf \
Dflume.root.logger=INFO,console

image

  1. 测试
    使用命令监控,为什么做比对
cd /tmp/root
tail -F hive.log

输入错的命令使其产生日志

hive -e "show databasessss"
  1. 查看HDFS中的文件
hadoop fs -ls /flume

image

posted @ 2021-12-27 17:42  白日醒梦  阅读(497)  评论(0编辑  收藏  举报