Flume是一个Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集,聚合和传输的系统,Flume基于流式框架,灵活简单。
Flume最主要的作用就是:实时读取服务器本地磁盘的数据,将数据写入到HDFS.
flume由三部分组成:
source:源
channel:通道
sink落水洞
可以把source和sink看成是数据的入口和出口,channel看成是数据传输的通道
Channel是位于Source和Sink之间的缓冲区
Flume自带两种Channel:Memory Channel 和File Channel
Memory Channel 是基于内存缓存(速度快),在不需要关心数据丢失的情景下使用。
File Channel是Flume的持久化Channel(速度慢),系统宕机不会丢失数据。
flume的结构:
1Agent是flume运行的一个最小单元,独立运行在单个jvm里面,一个agent里面包括一个或者多个sources、channels、sinks
2Event是Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。
3Client:客户端,相当于产生数据的地方
4Source:从客户端产生数据的地方收集数据
5Channel:数据管道,用于接收Source端的数据,然后将数据推送到对应的Sink中
6Sink:从channel中拉取数据,并将其存储到对应的持久化系统中。
7Event:事件,一个event相当于一条数据
8Interceptor:拦截器,它作用于Source端,也可以作用于Sink端,将符合条件的数据进行过滤。
9Selector:选择器,flume有两种选择器,默认使用replicating,还有一个Multiplexing
Source的类型有哪些?
avro(网络数据的一种格式) exec(可执行命令) syslogtcp http sppoling dir(监控目录)等
channel的类型有哪些?
【1】memory
优点:速度快
缺点:容易丢失数据
【2】file
优点:数据安全性高
缺点:速度慢
Sink的类型有哪些?
logger、hdfs、avro sink、hbase、file roll sink等
CDH Flume的配置:只需要解压,配置环境变量FLUME_HOME FLUME_HOME/bin
案例一
案例一:avro source网络数据(网络数据有很多种类型,avro是其中的一种)、 memory channel (内存channel)、 logger sink (日志输出)
#定义三个组件 (a1是agent的别名,运行的时候使用,r1,c1,s1分别是定义的sources,channels,sinks的名字)
a1.sources = r1
a1.channels = c1
a1.sinks = s1
#定义单个组件的属性(每一个组件最少都有一个类型type)
a1.sources.r1.type=avro(名字为r1的sources类型为avro)
a1.sources.r1.bind = 192.168.209.21 (ip)
a1.sources.r1.port = 6666 (端口号,往这台机器的6666端口上发消息可以被sources接收到)
#定义memory channel的属性
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000(最大存储event的数量)
a1.channels.c1.transactionCapacity=100(接收和传输event的数量)
a1.channels.c1.keep-alive=3(添加或者删除等待3秒)
a1.channels.c1.byteCapacityBufferPercentage=20(Event中head所占的比率为20%)
a1.channels.c1.byteCapacity=800000(channel容量为800000字节)
#定义loggersink
a1.sinks.s1.type=logger
a1.sinks.s1.maxBytesToLog=16(一条log最大的字节数)
#将source和sink分别和channl连接
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
启动agent的服务:
flume-ng agent -c ./conf -f ./conf/avro.conf -n a1 -Dflume.root.logger=INFO,console
-c:指定flume自带配置文件目录
-f:自己定义的配置文件
-n:agent的名字
-Dflume.root.logger=INFO,console 在控制台打印信息
测试:
flume-ng avro-client -c $FLUME_HOME/conf -H 192.168.91.7 -p 6666 -F /flumedata/test.log
-c:指定系统默认配置文件
-F:指定文件
-H:home ip
-p:port
-F:指定文件
操作过程:
【1】
vi /flumeconf/avro-logger.conf(名字写啥都行)
写如下内容:
a1.sources = r1
a1.channels = c1
a1.sinks = s1
a1.sources.r1.type=avro
a1.sources.r1.bind=192.168.209.21
a1.sources.r1.port=6666
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
a1.channels.c1.keep-alive=3
a1.channels.c1.byteCapacityBufferPercentage=20
a1.channels.c1.byteCapacity=800000
a1.sinks.s1.type=logger
a1.sinks.s1.maxBytesToLog=16
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
【2】
启动flume:
[root@item1 flumeconf]# flume-ng agent -c /usr/local/apache-flume-1.6.0-cdh5.13 .2-bin/conf/ -f /flumeconf/avro-logger.conf -n a1 -Dflume.root.logger=INFO,cons ole
此时它在监听192.168.209.21:6000端口
【3】
准备数据--再开一个该电脑的窗口
[root@item1 /]# mkdir flumedata
[root@item1 /]# ping wwww.baidu.com >> /flumedata/test.log
【4】测试--再开一个该电脑的窗口,【2】中的电脑会将从【4】监听到的消息打印到控制台
flume-ng avro-client -c /usr/local/apache-flume-1.6.0-cdh5.13.2-bin/conf -H 192.168.209.21 -p 6666 -F /flumedata/test.log