Flume之基本使用
一、简介
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。
二、组成架构
1.2.1、 Agent
1、Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元。Agent主要有3个部分组成,Source、Channel、Sink
1.2.2、 Source
1、Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。
1.2.3、 Channel
1、Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。
2、Flume自带两种Channel:Memory Channel和File Channel。Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
1.2.4、 Sink
1、Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
2、Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。
3、Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。
1.2.5、 Event
传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。
三、案例
3.1、监控端口数据案例
1、案例需求:
首先,Flume监控本机8989端口,然后通过telnet工具向本机8989端口发送消息,最后Flume将监听的数据实时显示在控制台。
2、安装telnet
sudo yum -y install telnet
3、配置文件内容如下
3.1、新建job文件夹,并创建flume-telnet-logger.conf
# Name the components on this agent
a1.sources = r1 # r1表示a1的输入源
a1.sinks = k1 # k1表示a1输出的目的地
a1.channels = c1 # c1表示a1的缓冲区
# Describe/configure the source
a1.sources.r1.type = netcat # 表示a1输入源类型为netcat端口类型
a1.sources.r1.bind = localhost # 表示a1监听本机
a1.sources.r1.port = 8989 # 表示a1监听的端口号
# Describe the sink
a1.sinks.k1.type = logger # a1的输出目的地是控制台
# Use a channel which buffers events in memory
a1.channels.c1.type = memory # 表示a1的channel类型为memory内存型
a1.channels.c1.capacity = 1000 # 表示a1的channel总容量为1000个event
a1.channels.c1.transactionCapacity = 100 # 表示a1的channel收集到100个event以后再提交事务
# Bind the source and sink to the channel
a1.sources.r1.channels = c1 # 表示r1和c1连接起来
a1.sinks.k1.channel = c1 # 表示k1和c1连接起来
4、先启动flume,再通过telnet发送数据到8989端口
# 启动flume
bin/flume-ng agent --conf ./conf/ --name a1 --conf-file job/flume-telnet-logger.conf -Dflume.root.logger=INFO,console
# 启动telnet
telnet localhost 8989
3.2、实时读取目录文件到HDFS案例
1、案例需求:
使用Flume监听整个目录的文件,并将结果写入到HDFS指定路径
2、配置文件如下
a3.sources = r3
a3.sinks = k3
a3.channels = c3
# Describe/configure the source
a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir = /opt/module/flume/upload
a3.sources.r3.fileSuffix = .COMPLETED
a3.sources.r3.fileHeader = true
#忽略所有以.tmp结尾的文件,不上传
a3.sources.r3<

Flume是一个用于收集、聚合和传输大规模日志数据的系统,具备高可用性和可靠性。核心组件包括Source(数据接收),Channel(缓冲区),Sink(数据输出)。常见Source有监控端口、读取目录文件等,Sink如HDFS、Logger等。通过Agent配置,实现不同场景的数据流转,如单数据源多出口策略。
最低0.47元/天 解锁文章
4224

被折叠的 条评论
为什么被折叠?



