Flume

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


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值