Flume基本使用
Flume概述
(一).Flume是什么
Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
(二).Flume的特点
flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
(三).Flume的一些核心概念
Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client生产数据,运行在一个独立的线程。
Source从Client收集数据,传递给Channel。
Sink从Channel收集数据,运行在一个独立线程。
Channel连接 sources 和 sinks ,这个有点像一个队列。
Events可以是日志记录、 avro 对象等。
(四).Flume架构
flume的sink也有很多种,常用的包括avro、logger、HDFS、Hbase以及file-roll等,除此之外还有其他类型的sink,如thrift、IRC、custom等。
Flume的安装与基本配置
解压
我的安装包在/usr/local/src/software下,安装目录我放在/usr/local/src下,具体命令如下:
[root@master ~]# tar -zxvf /usr/local/src/software/apache-flume-1.7.0-bin.tar.gz -C /usr/local/src/
为了方便后续使用,这里重命名目录
[root@master ~]# mv /usr/local/src/apache-flume-1.7.0-bin /usr/local/src/flume
配置环境变量
环境变量配置的位置有多处,我这里配置当前用户可用
[root@master ~]# vi /root/profile
export FLUME_HOME=/usr/local/src/flume
export PATH=$PATH:$FLUME_HOME/bin
[root@master ~]# source /root/profile
修改配置文件
flume需要修改的配置不多,更多是后续自定义需要监听的目录或端口的配置
[root@master ~]# cd /usr/local/src/flume/conf
[root@master conf]# mv flume-env.sh.template flume-env.sh
[root@master conf]# vim flume-env.sh
export JAVA_HOME=/usr/local/src/jdk8
Flume的使用
监听目录变化上传到HDFS
创建配置文件
创建配置文件,指定监听目录等信息。配置文件建议在flume安装目录下自建文件夹保存
[root@master ~]# mkdir /usr/local/src/flume/job
[root@master ~]# vi /usr/local/src/flume/job/test.conf
# Name the components on this agent 命名组件
a1.sources = r1 #数据采集组件
a1.sinks = k1 #数据接收器组件
a1.channels = c1 #数据通道组件
# Describe/configure the source 配置(描述)监听源
a1.sources.r1.type = spooldir #spooldir(目录类型)
a1.sources.r1.spoolDir = /root/logs #目录路径
a1.sources.r1.fileHeader= true #是否在header中添加完整的文件的完整信息
# Describe the sink 描述接收器
a1.sinks.k1.type = hdfs #输出到hdfs
a1.sinks.k1.hdfs.path = /flume/events/%Y-%m-%d/ #文件保存路径
#控制文件夹,把10分钟之内的保存在一个文件夹中
a1.sinks.k1.hdfs.round = true #是否启用时间上的'舍弃'
a1.sinks.k1.hdfs.roundValue=10 #时间上进行'舍弃'的值
a1.sinks.k1.hdfs.roundUnit = minute #时间上进行'舍弃'的单位
#描述文件迭代次数 满足其中一个条件则打开一个新的临时文件继续写入
a1.sinks.k1.hdfs.rollInterval = 3 #时隔多长将临时文件滚动成最终文件,单位为秒,如果设置为0,则表示关闭
a1.sinks.k1.hdfs.rollSize = 20 #当临时文件达到多少(单位:byte)时,滚动成目标文件,如果设置为0,则表示关闭
a1.sinks.k1.hdfs.rollCount = 5 #当event数据达到该数量时,将临时文件滚动成目标文件,如果设置为0.则表示关闭
a1.sinks.k1.hdfs.filePrefix = events- #保存数据的浅前缀名
a1.sinks.k1.hdfs.fileType = DataStream #文件格式,DataStream不会被压缩
a1.sinks.k1.hdfs.useLocalTimeStamp = true #是否使用当地时间
# Use a channel which buffers events in memory 使用内存通道缓冲事件
a1.channels.c1.type = memory #指定通道为内存
a1.channels.c1.capacity = 1000 #存储在通道内的最大容量
a1.channels.c1.transactionCapacity = 100 #从一个source中取或者传输到sink,每个事务中最大的事件数
# Bind the source and sink to the channel 将源和接收器绑定到通道
a1.sources.r1.channels = c1 #注意一个源可以有多个通道channels
a1.sinks.k1.channel = c1
这里监听的/root/logs目录.在这个目录创建的文件会被上传到hdfs的/flume/events/%Y-%m-%d/目录中
启动
[root@master flume]#bin/flume-ng agent -f job/test.conf -n a1
启动参数概述
- flume-ng flume启动器
- agent 运行一个flume agent(最小的独立运行单位,一个Agent包含多个source、channel、sink和其他组件)
- -f agent选项,指定一个配置文件(还有一种写法:--conf-file),此处为job目录下的test.conf
- -n agent名称 此处为a1