大数据日志文件实时收集框架Flume介绍及其使用

标签: Flume
20人阅读 评论(0) 收藏 举报
分类:

大数据中,我们经常会将一些日志文件收集分析,比如网站的日志文件等等,我们需要一个工具收集数据并且上传到HDFS,HIVE,HBASE等大数据仓库中,Apache为我们提供了一个很好的文件实时收集框架供我们使用。

一、Flume的介绍

官网的介绍如下:

Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.

The use of Apache Flume is not only restricted to log data aggregation. Since data sources are customizable, Flume can be used to transport massive quantities of event data including but not limited to network traffic data, social-media-generated data, email messages and pretty much any data source possible.

Apache Flume is a top level project at the Apache Software Foundation.

Flume框架是一个分布式,可信以及高可用的用来从一个源端有效的收集,聚集和移动海量日志文件存储到数据仓库的系统。
Flume框架在大数据分析中还是有着重要的地位,它是Apache的一个顶级项目。
Flume的架构图如下:
这里写图片描述
Flume由三大组件构成:

  • Source
  • Channel
  • Sink

在介绍中之所以说它是一个分布式框架,是因为它本身就是一个客户端,每一个客户端是一个Agent,可以分布在一个集群的各个节点收集日志信息。下面的一幅图表现出其分布式架构:
这里写图片描述

遗憾的是Flume只能运行在linux服务器上,下面看看安装运行Flume的必需环境:

  1. linux系统
  2. JDK环境
  3. 足够的内存空间和磁盘空间(一般不需要很大)

Flume是怎样工作的呢?
这时就有一个概念:
Event:
什么是event呢?

A Flume event is defined as a unit of data flow having a byte payload and an optional set of string attributes.

event是一次收集传递数据的最小单位。
Event由一个可选的header头和一个载有数据的byte array组成,载有的数据对flume是不透明的,header是一个容纳了key-value对的无序集合,key在这个集合中唯一存在,这个类似于Java中的set集合,无序不可重复。

Flume可以从外部的一个源端(例如Web Server)通过Source组件来收集日志,每一次收集的日志都会被封装在一个Event中,主动(put)存放在Channel中,sink会(poll)从这个Channel中获取数据存储到数据仓库中。这个Channel是一个队列,里面存放着event,channel可以存放在内存中,也可以在文件中等等。

三大组件的介绍
上面说到Flume的三大组件sources,channel,sinks。
在Apache官网中它提供了这三大组件的种类,这里列举了几个常用的来说明。
常用的Sources:
这里写图片描述
下面的案例中我们会用NetCar TCP Source来演示。

常用的channel:
这里写图片描述
下面案例中使用Memory Channel,存放在内存中。

常用Sink如下:
这里写图片描述
下面案例中使用Logger Sink,将收集的数据打印在控制台日志中。

二、简单的Flume日志搭建

1.安装Flume
Flume的安装很简单,只需要下载安装解压然后修改配置文件即可。下载地址【http://archive.cloudera.com/cdh5/】,这里使用的是Flume 1.5.0-cdh5.3.6这个版本。
在Flume解压后,会有一个bin目录,里面有一个Flume-ng,Flume-ng只有一个角色的节点:agent节点,agent由Source、channel、sink组成。启动时会利用它来启动Flume。

然后进入conf目录下,在flume-env.sh文件添加jdk路径:

export JAVA_HOME=/opt/modules/jdk1.7.0_79

下面我们来列举一个案例看看Flume是如何实时收集日志文件的。
如上面所说,我们使用NetCat Source(linux的一个软件,可以在远程服务器的控制台输入信息并且接收),Memory Channel,Logger Sink,将接收的日志信息打印在客户端。

在conf目录下创建一个a1.conf文件,编辑内容如下:

# The configuration file needs to define the sources, 
# the channels and the sinks.
# Sources, channels and sinks are defined per agent, 
# in this case called 'agent'
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#define sources
a1.sources.r1.type = netcat
a1.sources.r1.bind = hadoop-senior.shinelon.com
a1.sources.r1.port = 44444

#define channels
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#a1.channels.c1.keep-alive=100
#a1.channels.c1.byteCapacityBufferPercentage=20

#define sink
a1.sinks.k1.type = logger
a1.sinks.k1.maxBytesToLog = 2014

#bind sources and sink to channel 
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

上面的代码都有注释,不加详细解释,就是定义Source,Channel,Sink。编译好之后保存。
注意,使用NetCat Source需要安装telnet软件。
在启动Flume之前讲解一下Flume-ng的几个参数:

  • -c或者–conf:跟配置目录
  • -f或者–conf-file:跟具体的配置文件
  • -n或者–name:指定agent的名称
    然后在Flume 的安装目录下输入命令启动:
bin/flume-ng agent --conf conf --name al --conf-file conf/a1.conf -Dflume.root.logger=DEBUG,console

然后打开另一个控制台,用来连接Flume并且发送信息:

[shinelon@hadoop-senior root]$ telnet hadoop-senior.shinelon.com 44444

连接之后,当我们发送信息,控制台就会打印信息。
这里写图片描述

这里写图片描述

至此,我们就介绍完Flume,并且用一个简单的案例来演示Flume,通过这个案例我们可以感受到它的工作流程以及它的实时性。


查看评论

大数据日志收集框架之Flume入门

Flume是Cloudrea公司开源的一款优秀的日志收集框架,主要经历了两个大的版本,分别是  Flume-OG  Flume-NG  OG是0.9.x的版本,依赖zookeeper,角色职责不...
  • u010454030
  • u010454030
  • 2016-02-29 13:49:33
  • 909

[大数据]flume日志收集

工作中再次使用到了Flume,记录下flume配置过程中的一些问题。 涉及到的知识点: flume,exec source,file channel,avro sink,cumtom sink开发 ...
  • xnby
  • xnby
  • 2016-04-11 20:17:48
  • 1646

分布式日志收集框架Flume:监控一个文件实时采集新增的数据输出到控制台

前提:主机上的其他的配置都已经完成,很重要的一点是/etc/hosts路径文件下的ip要是你当前使用的ip Agent选型:exec source + memory channel +log...
  • txgANG
  • txgANG
  • 2018-01-23 16:51:53
  • 217

Flume-NG 日志文件收集 简单实例

公司计划部署Flume日志采集系统,所以简单学习了一下相关的配置和使用。主要在自己的虚拟机上测试验证。 虚拟机是CentOS6.7系统,Flume1.6.0。Flume安装很简单,下载官方软件包,解压...
  • w83304911
  • w83304911
  • 2015-12-01 17:13:40
  • 2332

flume实时收集日志到kafka

Flume实时收集日志 kafka版本0.8.2 1.版本apache-flume-1.7.0-bin.tar.gz 解压后conf 目录下配置以.conf结尾的文件如(flume_proper...
  • likeChocolates
  • likeChocolates
  • 2017-07-14 15:49:46
  • 976

flume定时采集日志的配置

1 Flume安装和配置1.在10台日志服务器和1台日志收集服务器上分别上传apache-flume-1.6.0-bin.tar安装包。2.解压apache-flume-1.6.0-bin.tar安装...
  • qq_37359656
  • qq_37359656
  • 2018-01-16 15:25:09
  • 450

Flume 读取实时更新的日志文件

1. 日志文件每天roate一个新文件  a)  方案一 There is no way the tail command itself can automatically switch to t...
  • bright60
  • bright60
  • 2016-02-24 10:32:20
  • 3570

大数据下的日志-flume(一)简介及例子

有很多人解释flume是什么,听着都很高大上,但是,这个世界原本就很简单,没有必要这么理解,我们今天就听听我对flume的定义,flume是已经写好的一组代码,用来传输数据用的,和java file的...
  • xvshu
  • xvshu
  • 2015-11-15 16:36:24
  • 3265

Flume采集处理日志文件

http://www.cnblogs.com/windcarp/p/3872578.html Flume简介 Flume是Cloudera提供的一个高可用的,高可靠...
  • liukuan73
  • liukuan73
  • 2016-09-03 14:27:30
  • 2758

Flume和Kafka完成实时数据的采集

Flume和Kafka完成实时数据的采集写在前面 Flume和Kafka在生产环境中,一般都是结合起来使用的。可以使用它们两者结合起来收集实时产生日志信息,这一点是很重要的。如果,你不了解f...
  • liuge36
  • liuge36
  • 2017-11-21 22:32:00
  • 197
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 7488
    积分: 636
    排名: 8万+
    博客专栏
    最新评论