版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wx1528159409
目录
3. 安装Flume步骤(以apache-flume-1.7.0为例)
一、Flume是什么
官方定义:Flume是Cloudera提供的一个高可用、高可靠的,分布式的海量日志采集、聚合和传输系统。
个人理解Flume是用于日志采集和传输的一个框架,相对应于liunx中的 -put命令;
但Flume相比-put命令传输日志数据的缺点而言:
1. -put命令上传的都是静态数据,而Flume可以传输动态数据;
2. -put命令上传大量数据时,读的时间长,写的时间短,会造成内存溢出、数据丢失等后果,而Flume有缓冲机制,实现读写一致。
总体来看,Flume是一个采集数据框架,它并不存储数据,Flume就是实时读取服务器本地磁盘的数据,并将数据写入到HDFS、kafka、Hbase等终端中的。
二、 Flume的组成架构
借用网上的一张Flume组织架构示意图:
(1)Agent
Agent是一个Flume进程,是Flume数据传输的基本单元,Agent分为Source、Channel和Sink三部分。
(2)Source
Source用于接收处理不同类型、不同格式的日志数据,它有两个作用:
a. 接收客户端数据到Agent中
b. 把数据封装成event形式,然后传递给Channel
常见的日志数据格式有:
avro:是一个第三方框架,主要作用是将数据序列化和反序列化;
两个Flume串联时,前一个Flume的Sink和后一个Flume的Source,用的就是avro类型的数据;
exec:即execute,执行一段linux命令,对文件进行修改,文件类型的数据;
spooling directory:文件夹类型的数据;
netcat:第三方工具,主要作用:1. 监控主机指定端口生成的数据并传输数据
2. 占用指定主机端口,并向其他端口发送数据(使用-nc命令)
此外还有syslog、sequence generator、http、legacy、thrift等类型的日志数据。
(3)Channel
位于Source和Sink之间的缓冲区,用于缓存数据,存储event;
Channel线程安全,可以同时处理多个Source的写入操作和多个Sink的读取操作。
Flume自带的两种Channel:
Memory Channel:基于内存缓存,优点是速度快,缺点是容易丢失数据;
File Channel:将数据序列化到本地磁盘,优点是数据安全,缺点是速度慢;
企业开发中更常用Memory Channel。
(4)Sink
Channel将数据批量导入缓冲区takeList中,Sink主动去缓冲区批量获取数据,并将这些事件批量写入到存储或索引系统,或另一个Flume Agent中;
Sink如果将批量事件发送成功,Channel会从内部缓冲区takeList中删除事件;
Sink如果发送数据异常,takeList会将数据回滚到Channel,重新批量导入数据事件。
Sink的目的地包括:HDFS、Kafka、HBase、logger、avro、thrift、ipc、file、null、solr、自定义
(5)Event
Flume数据传输的基本单元,事件形式,传输要么全部成功,要么全部失败;
Event由可选的header和载有数据的byte array组成:
header是容纳key-value键值对的HashMap,一般是空的;byte array是装载数据的字节数组。
三、Flume的下载与安装
1. Flume官网链接
2. Flume安装包下载地址
3. 安装Flume步骤(以apache-flume-1.7.0为例)
(1)将apache-flume-1.7.0-bin.tar.gz上传到linux的/opt/software目录下;
(2)解压apache-flume-1.7.0-bin.tar.gz到/opt/module/目录下;
[kevin@hadoop100 software]$ tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/module/
(3)修改apache-flume-1.7.0-bin的名称为flume
[kevin@hadoop100 module]$ mv apache-flume-1.7.0-bin flume
(4)将flume/conf下的flume-env.sh.template文件修改为flume-env.sh
[kevin@hadoop100 conf]$ mv flume-env.sh.template flume-env.sh
(5)配置文件flume-env.sh,写入自己的JDK安装路径
[kevin@hadoop100 conf]$ vi flume-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144