1.Flume简介

什么是flume

flume是apache的一个数据收集框架。定义了一个数据流的模型。下面这张图hadoop业务开发流程图可以说明Flume的重要性:


Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。apache Flume 是一个从可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/服务,或者数集中机制。其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。其结构如下图所示:



Flume架构

Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成agent里面包含3个核心的组件:source—->channel—–>sink,类似生产者、仓库、消费者的架构。

Flume的一些核心概念:

Agent:使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client:生产数据,运行在一个独立的线程。
Source:从Client收集数据,传递给Channel。
Sink 从Channel收集数据,运行在一个独立线程。
Channel:连接 sources 和 sinks ,这个有点像一个队列。
Events:可以是日志记录、 avro 对象等。

Flume运行流程:

Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source,比如上图中的Web Server生成。当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。flume之所以这么神奇,是源于它自身的一个设计,这个设计就是agent,agent本身是一个Java进程,运行在日志收集节点。

三大组件介绍:

Source:

从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channal,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等

Channel:

channal是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等.

sink:

sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.

单点Flume配置

1.上传解压Flume

2.修改conf下的flume-env.xml文件

JAVA_HOME=

3.创建agentDemo.conf文件放置在conf目录下,添加内容如下:

#定义agent名:agentDemo, source、channel、sink的名称分别为r1,c1,k1
agentDemo.sources = r1
agentDemo.channels = c1
agentDemo.sinks = k1

#具体定义source类型,监听的目录
agentDemo.sources.r1.type = spooldir
agentDemo.sources.r1.spoolDir = /home/hadoop/logs

#具体定义channel,类型,容量(容纳多少条数据),事物容量
agentDemo.channels.c1.type = memory
agentDemo.channels.c1.capacity = 10000
agentDemo.channels.c1.transactionCapacity = 100

#定义拦截器,为消息添加时间戳(拦截器还可以拦截无效数据)
agentDemo.sources.r1.interceptors = i1
agentDemo.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder


#具体定义sink,数据写入位置,地址,数据文件前缀,文件类型(纯文本方式)
agentDemo.sinks.k1.type = hdfs
agentDemo.sinks.k1.hdfs.path = hdfs://ns1/flume/%Y%m%d
agentDemo.sinks.k1.hdfs.filePrefix = events-
agentDemo.sinks.k1.hdfs.fileType = DataStream
#不按照条数生成文件,几条进行写入,0不安条数
agentDemo.sinks.k1.hdfs.rollCount = 0
#HDFS上的文件达到128M时生成一个文件
agentDemo.sinks.k1.hdfs.rollSize = 134217728
#HDFS上的文件达到60秒生成一个文件
agentDemo.sinks.k1.hdfs.rollInterval = 60

#组装source、channel、sink
agentDemo.sources.r1.channels = c1
agentDemo.sinks.k1.channel = c1

4.此时不知道其中配置的hdfs:ns1位置

将hadoop集群配置中的core-site.xml和hdfs-site.xml拷贝到conf目录下

5.拷贝缺少的hadoop中的jar到flume的lib中

hadoop-hdfs-2.6.5.jar  
hadoop-auth-2.6.5.jar  
commons-configuration-1.6.jar
hadoop-common-2.6.5.jar

6.别忘记配置文件中的指定目录是否存在,还有集群配置的主机名ip对应关系在本机是否存在

7.启动Flume

bin/flume-ng agent -n agentDemo -c conf -f conf/agentDemo.conf -Dflume.root.logger=INFO,console

参数说明: 
-n 指定agent名称(与配置文件中代理的名字相同) 
-c 指定flume中配置文件的目录 
-f 指定配置文件 
-Dflume.root.logger=DEBUG,console 设置日志等级

PS:-Dflume.root.logger=INFO,console 仅为 debug 使用,请勿生产环境生搬硬套,否则大量的日志会返回到终端。
启动时切记按照官方文档说明启动:
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
不要cd到bin目录下使用./flume-ng,否则会找不到自带的log4j.properties文件
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
17/03/10 18:37:14 ERROR node.Application: A fatal error occurred while running. Exception follows.
org.apache.commons.cli.ParseException: The specified configuration file does not exist: /hadoop/flume-1.7.0/bin/conf/a4.conf
	at org.apache.flume.node.Application.main(Application.java:316)


实际环境中有这样的需求,通过在多个agent端tail日志,发送给collector,collector再把数据收集,统一发送给HDFS存储起来,当HDFS文件大小超过一定的大小或者超过在规定的时间间隔会生成一个文件。

多agent汇聚写入到HDFS中流程图:





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值