Flume概述

flume 简介

1.flume是cloudera开发的后来贡献给了Apache的一套用分布式,高可靠的,高可用的海量分布式日志采集、聚合和传输的系统。
2.flume 的版本更新缓慢但是稳定。
3.flume的版本
a:flume 0.9 :flume-og。对线程的并发和安全性支持不好。
b:flume 1.0 :flume-ng。对并发性和安全性支持较好,并且提供了更好的分布式的扩展性。flume-og和flume-ng不兼容。

基本概念

1.Event: a.flume会将收集到每一条日志封装成一个Event对象,所以一个Event就是一条日志。 b.Event本质上是json串,即flume将收集到到每一条日志封装了一个个的json,一个json就是一个Event。 c.Event 固定的包含2部分,headers和bady2.Agent(是flume的基本组成结构) a.source:用于从数据源来采集数据 b.channel:用于临时存储数据 c.sink : 用于将数据发往目的。

flume监视服务器的本地 flume监控工具_apache


Flume逻辑上分三层架构:agent,collector,storage


flume监视服务器的本地 flume监控工具_Source_02


agent用于采集数据,agent是flume中产生数据流的地方,同时,agent会将产生的数据流传输到collector。


collector的作用是将多个agent的数据汇总后,加载到storage中。


storage是存储系统,可以是一个普通file,也可以是HDFS,HIVE,HBase等。


Flume的架构主要有一下几个核心概念:


Event:一个数据单元,带有一个可选的消息头


Flow:Event从源点到达目的点的迁移的抽象


Client:操作位于源点处的Event,将其发送到Flume Agent


Agent:一个独立的Flume进程,包含组件Source、Channel、Sink


Source:用来消费传递到该组件的Event


Channel:中转Event的一个临时存储,保存有Source组件传递过来的Event


Sink:从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent(如果有的话)

安装flume

flume下载地址 解压安装包并重命名

$ | tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr/local # 将apache-flume-1.7.0-bin.tar.gz #解压到指定文件夹下
$ | cd /usr/local/src/ # 移动到指定文件夹下
$ | mv apache-flume-1.7.0-bin flume # 重命名

配置环境变量

$ | vim /etc/profile

然后在你的末尾行加入如下代码:

$ | export FLUME_HOME=/usr/local/src/flume 
$ | export FLUME_CONF_DIR=$FLUME_HOME/conf
$ | export PATH=$PATH:$FLUME_HOME/bin

设置source环境生效

$ | source /etc/profile

修改flume配置文件(flume-env.sh)

$ | cd /usr/local/src/flume/conf # 移动到配置文件下
$ | cp flume-env.sh.template flume-env.sh # 复制新的文件数据
$ | vim flume-env.sh #进入文件

打开flume-env.sh 文件以后,在文件的最开始位置增加一行内容,用于设置java_home变量:

$ | export JAVA_HOME=/usr/local/src/java

然后,保存并退出文件

 
查看flume版本信息

$ | flume-ng version # 查看flume版本信息

安装成功,会出现如下图片

flume监视服务器的本地 flume监控工具_flume_03


 

测试flume

创建agent配置文件

$ | cd /usr/local/src/flume
$ | vim ./conf/avro.conf # 在conf目录下编辑一个avro.conf空文件

然后,我们在avro.conf 写入以下内容

$ |  a1.sources = r1
$ |  a1.sinks = k1 
$ |  a1.channels = c1
$ | 
$ |  # Decsribe/configure the source
$ |  a1.sources.r1.type = avro
$ |  a1.sources.r1.channels = c1
$ |  a1.sources.ri.bind = hadoop # 这是你的用户名或者是你的ip 0.0.0.0
$ |  a1.sources.r1.port = 4141 # 注意这个端口号.在启动时会用到
$ |  # Decsribe the sink
$ |  a1.sinks.k1.type = logger
$ |  
$ |  # Use a channel which buffers in memory
$ |  a1.channels.c1.type = memory
$ |  a1.channels.c1.capacity = 1000
$ |  a1.channels.c1.transactionCapacity = 100
$ | 
$ |  # Bind the source and sink to the channel
$ |  a1.sources.r1.channels = c1
$ |  a1.sinks.k1.channel = c1
上面的Avro Source 参数说明如下:
    Avro Source的别名是avro,也可以使用完整类别名称org.apache.flume.source.AvroSource,因此,上面有一行设置是a1.sources.r1.type = avro,表示数据源的类	型是avro。
	bind绑定的ip地址或主机名,使用0.0.0.0表示绑定机器所有的接口。a1.sources.r1.bind = 0.0.0.0,就表示绑定机器所有的接口。
	port表示绑定的端口。a1.sources.r1.port = 4141,表示绑定的端口是4141。
	a1.sinks.k1.type = logger,表示sinks的类型是logger。

启动 flume agent a1

$ | /usr/local/src//flume/bin/flume-ng agent -c . -f /usr/local/src/flume/conf/avro.conf -n a1 -Dflume.root.logger=INFO,console # 启动日志控制器

flume监视服务器的本地 flume监控工具_flume_04


创建指定文件

先打开另外一个终端,在/usr/local/flume下写入一个文件log.00,内容为hello,world:

$ | cd /usr/local/src/flume
$ | bin /flume-ng avro-client --conf conf -H localhost -p 4141 -F /usr/local/src/flume/log.00

此时我们可以看到第一个终端(agent窗口)下的显示,也就是在日志控制台,就会把log.00文件的内容打印出来:

flume监视服务器的本地 flume监控工具_数据_05


avro source执行成功!案例over!