Flume是一个高可用的、高可靠的、海量分布式日志采集、聚合和传输的系统。

1.对于Flume的简单理解,不妨先看一下Flume的简单架构模型

flume采集日志到本地 flume日志采集实训总结_Source


这是最简单的一个模型,也是最清楚的一个架构原;可以看出来,Flume最核心的部分其其实只分为三个部分SourceChannelSink三个部分,Source负责收集外部日志,当接收到外部日志后将信息存入ChannelChannel是一个短暂的存储容器,当Source将数据接收之后会将数据暂存入Channel,它是SourceSink之间的一个桥梁。Channel是一个完整的事务,所以它保证了数据的收发一致性,另外它可以和任意多个Source和Sink相连接,使Flume能够更加灵活的实现一些开发中复杂的架构;Sink是一个对外负责的组件,他可以消费Source组件里面的数据,它可以将数据输出到HDFS或HBash等外部文件。

2.下面可以根据一些例子搭建一下Flume的运行环境,这里我用的环境是:

CentOS 6.5 apache-flume-1.7.0-bin jdk8.0

1.安装JDK配置环境变量*(略)

#2.配置安装flume
`[root@CentOS ~]# tar -zxf apache-flume-1.7.0-bin.tar.gz -C /usr/`
#3.查看是否安装成功   可以查看一下版本信息 (在Flume的目录下)
`[root@CentOS apache-flume-1.7.0-bin]# ./bin/flume-ng version`
`[root@CentOS ~]#vi /usr/apache-flume-1.7.0-bin/conf/demo1.properties`
# 配置方案1,开启服务器,客户端登录服务器,客户端接收的信息被服务器捕获并展示。
#首先配置声明组建
a1.source = r1
a1.sinks = k1
a1.channels = c1
#配置接收器对象也就是前面介绍到的Source
a1.sources.r1.type = netcat #接受类型是网络传输
a1.sources.r1.bind  = CentOS  #发布服务的主机名
a1.sources.r1.port = 44444  #服务发布的端口号
#配置Sink的输出类型,这里我们设置成以日志的格式输出
a1.sinks.k1.type = logger
#配置管道通讯
a1.channels.c1.type = memory  #定义它的类型为存储器
a1.channels.c1.capacity = 1000 #定义它的储存容量
a1.channels.c1.transactionCapacity = 100 #定义它的交换数据的能力
#关联组件
# 关联source和channel
a1.sources.r1.channels = c1
# 关联sink和channel
a1.sinks.k1.channel = c1
#启用这中网络模式传输数据的时候必须借助 netcat工具,安装netcat工具
`[root@CentOS ~] # yum install -y telnet`
`[root@CentOS apache-flume-1.7.0-bin]# ./bin/flume-ng agent  --conf conf/  --conf-file conf/demo1.properties  --name a1  -Dflume.root.logger=INFO,console`
#连接客户端
`[root@CentOS ~] # netcat CentOS 44444`

启动成功

flume采集日志到本地 flume日志采集实训总结_Source_02


客户端登陆后传递

flume采集日志到本地 flume日志采集实训总结_Source_03


开始发送日志 服务器接收展示

flume采集日志到本地 flume日志采集实训总结_CentOS_04


flume采集日志到本地 flume日志采集实训总结_hdfs_05


第二种采集的方式,将采集到的的数据存储带HDFS中,这里需要你安装HDFS的服务,安装方式请自行百度。

# 声明组件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 配置source组件
a1.sources.r1.type = avro
a1.sources.r1.bind = CentOS
a1.sources.r1.port = 44444
# 添加时间戳拦截器 装饰
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = timestamp
# 配置Sink组件
a1.sinks.k1.type = hdfs  #设置上传的系统为为hdfs
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d  #上传的hdfs的路径
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollSize = 0 
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.fileType = DataStream
# 配置管道
a1.channels.c1.type = memory
# 关联source和channel
a1.sources.r1.channels = c1
# 关联sink和channel
a1.sinks.k1.channel = c1

启动服务器 详情见上一种方式
启动客户端

`[root@CentOS apache-flume-1.7.0-bin]# ./bin/flume-ng avro-client   --host CentOS  --port 44444  --filename /root/item.cvs `