Hadoop之flume 框架日志采集原理及使用

本文详细介绍了Apache Flume的架构、优点,以及在企业开发中的多个案例,包括监控端口数据、实时读取本地文件到HDFS、多数据源汇总等。Flume是一个高可用、高可靠的日志采集系统,通过Source、Channel和Sink实现数据的收集、存储和传输。案例涵盖了配置文件的编写、监控数据源、数据处理和目的地设置,展示了Flume在日志管理和分析中的强大功能。
摘要由CSDN通过智能技术生成

文章目录

FLUME 框架

Flume 是采集日志框架

一 概述

1.1 Flume定义

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

1.2Flume的优点

  1. 可以和任意存储进程集成。

  2. 输入的的数据速率大于写入目的存储的速率,flume会进行缓冲,减小hdfs的压力。

  3. flume中的事务基于channel,使用了两个事务模型(sender + receiver),确保消息被可靠发送。

Flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递。一旦事务中所有的数据全部成功提交到channel,那么source才认为该数据读取完成。同理,只有成功被sink写出去的数据,才会从channel中移除。

1.3Flume组成架构

在这里插入图片描述
在这里插入图片描述

Spooling directory 一个文件夹里文件不停滚动

Exec:执行结果

Syslog: 系统日志

1)Agent

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。

Agent主要有3个部分组成,Source、Channel、Sink。

2)Source

Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。

3)Channel

Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。

Flume自带两种Channel:Memory Channel和File Channel。

Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

4)Sink

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。

Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。

5)Event

传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。 Event由可选的header和载有数据的一个byte array 构成。Header是容纳了key-value字符串对的HashMap。

在这里插入图片描述

1.4Flume拓扑结构

在这里插入图片描述

这种模式是将多个flume给顺序连接起来了,从最初的source开始到最终sink传送的目的存储系统。此模式不建议桥接过多的flume数量, flume数量过多不仅会影响传输速率,而且一旦传输过程中某个节点flume宕机,会影响整个传输系统

在这里插入图片描述

flume支持将事件流向一个或者多个目的地。这种模式将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地。

在这里插入图片描述

Flume支持使用将多个sink逻辑上分到一个sink组,flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。

1.5 Flume &Agent内部原理

可能写入重复数据(安全性高)

在这里插入图片描述

二 快速入门

2.1 Flume安装地址

1) Flume官网地址

http://flume.apache.org/

2)文档查看地址

http://flume.apache.org/FlumeUserGuide.html

3)下载地址

http://archive.apache.org/dist/flume/

2.2 安装部署

1)将apache-flume-1.7.0-bin.tar.gz上传到linux的/opt/software目录下

2)解压apache-flume-1.7.0-bin.tar.gz到/opt/module/目录下

[root@hadoop102 software]$ tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /opt/module/

3)修改apache-flume-1.7.0-bin的名称为flume

[root@hadoop102 module]$ mv apache-flume-1.7.0-bin flume

4) 将flume/conf下的flume-env.sh.template文件修改为flume-env.sh,并配置flume-env.sh文件

[root@hadoop102 conf]$ mv flume-env.sh.template flume-env.sh

[root@hadoop102 conf]$ vi flume-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

三 企业开发案例

3.1监控端口数据官方案例

1)案例需求:

首先启动Flume任务,监控本机44444端口,服务端;

然后通过netcat工具向本机44444端口发送消息,客户端;

最后Flume将监听的数据实时显示在控制台。

2)需求分析:

在这里插入图片描述

3)实现步骤:
1.安装netcat工具

[root@hadoop102 software]$ sudo yum install -y nc

2.判断44444端口是否被占用

[root@hadoop102 flume-telnet]$ sudo netstat -tunlp | grep 44444

功能描述:netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

基本语法:netstat [选项]

选项参数:

​ -t或–tcp:显示TCP传输协议的连线状况;

-u或–udp:显示UDP传输协议的连线状况;

​ -n或–numeric:直接使用ip地址,而不通过域名服务器;

​ -l或–listening:显示监控中的服务器的Socket;

​ -p或–programs:显示正在使用Socket的程序识别码(PID)和程序名称;

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

在flume目录下创建job文件夹并进入job文件夹。

[root@hadoop102 flume]$ mkdir job

[root@hadoop102 flume]$ cd job/

在job文件夹下创建Flume Agent配置文件flume-netcat-logger.conf。

[root@hadoop102 job]$ touch flume-netcat-logger.conf

在flume-netcat-logger.conf文件中添加如下内容。

[root@hadoop102 job]$ vim 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

注:配置文件来源于官方手册http://flume.apache.org/FlumeUserGuide.html

配置文件解析说明

在这里插入图片描述

  1. 先开启flume监听端口
第一种写法:

[root@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

在这里插入图片描述
在这里插入图片描述

第二种写法:

[root@hadoop102 flume]$ bin/flume-ng agent -c conf/ -n a1 –f job/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值