首页 » 技术分享 » Flume的简单介绍

Flume的简单介绍

 

Flume概述:

Apache Flume是一个分布式的、可靠的、可用的系统,用于有效地收集、

聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储。

 

Apache Flume的使用不仅仅局限于日志数据聚合。由于数据源是可定制的,

Flume可以用于传输大量事件数据,包括但不限于网络流量数据、

社交媒体生成的数据、电子邮件消息和几乎所有可能的数据源。

=================================================================

flume的优点

1.可以和任意集中式存储进行集成(HDFSHBASE

2.输入的数据速率大于写入存储目的地速率,flume会进行缓冲

3.flume提供上下文路由(数据流路线)

4.flume中的事物基于channel,使用了两个事物模型(sender+receiver

确保消息被可靠发送

5.flume是 可靠的,容错的,可扩展的,。

flume特点

----------------------------------------

1.flume高效收集web serverlogHDFS HBASE

2.高校获取数据到hadoop

3.导入大量数据

4.flume支持大量的sourcedestination类型

5.flume支持多级跳跃,sourcedestination的扇入和扇出

6.flume可以水平伸缩

 

为什么用flume而不用hdfsput

------------------------------------------

1.同一时刻只能传输一个文件

2.put处理的是静态文件

 

架构-组件-配置说明

 

 

Flume架构:

 

1. 描述

在数据生成器运行的节点上启动单独的flume agent。来收集数据

数据收集器收集数据,推送到HDFS,HBASE

2. Flume Event

事件是flume的传输单元,主要是byte[],可以含有一些header信息

sourcedestination之间

 

 

 

 

3. Flume agent

每个agent是一个独立的Java进程,从客户端(其他agent)接收数据

然后转发到下一个destinationsink(沉槽) | agent

Agent包含三个组件:

A. Source(源)->生成数据的地方

从事件生成器接收数据,以event事件的形式传给一个或多个channel

B. Channel(通道)

source中接受flume event,作为临时存放地,缓存到buffer中,直到sink

将其消费掉,是sourcesink之间的桥梁

Channel是事务的,可以和多个sourcesink协同

C.sink(沉槽)

存放数据到HDFS,从channel中消费event,并分发给destinationsink

Destination 也可以是另一个agent或者HDFSHBASE

 

注意:一个flumeagent,可以有多个sourcechannelsink

 

 

 

 

 

 

 

                           

 

Flume的附加组件

 

1. 拦截器

2. 通道选择器

3. Sink处理器

安装flumn-1.6.0

------------------------

1.下载flume-

2.tar ln -s apahe-flume-1.6.-bin flume

3.配置环境变量

export FLUMN_HOME=/usr/local/soft/flume-1.6.0

export PATH=$PATH:$FLUMN_HOME/bin

4.验证安装

[hadoop@master conf]$ flume-ng version

5.配置flume

flume-env.sh

export JAVA_HOME=/usr/local/soft/jdk1.8.0

 

 

配置Flume

1.命名agent组件

2.描述配置source

3.描述配置channel

4.描述配置sink

5.绑定sourcesink,channel

 

agent_name)

a1.sources=r1,r2

a1.sinks=s1,s2

a1.channels=c1,c2

 

#sources-r1

a1.sources.r1.type=

a1.sources.r1.xxx=

a1.sources.r1.yyy=

 

#sink-s1

a1.source.r1.type=

a1.sources.r1.xxx=

 

#channels-c1

a1.channels.c1.type=

a1.channels.c1.xxx=

 

#binding(绑定)一个source可以配置多个channel

a1.sources.r1.channels=c1 (可以配多个通道)

a1.sinks.s1.channel=c1 (sink只能配置一个channel)

 

 

Flume核心类考察

 

Simple案例

flume-conf.properties

 

# Name the components on this agent

a1.sources = r1

a1.sinks = k1

a1.channels = c1

 

# Describe/configure the source

a1.sources.r1.type = netcat

a1.sources.r1.bind =localhost  //0.0.0.0 (统配到本机的所有ip上面去)

a1.sources.r1.port = 44444

 

# Describe the sink

a1.sinks.k1.type = logger  -->通过控制台或者文件可以控制输出

 

# Use a channel which buffers events 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

 

 

 

 

 

 

运行flume agent

#--conf :配置目录

#--conf-file :配置文件

#--name  :代理名称

#-D    :指定额外的参数

$>cd flume/conf

$>flume-ng agent --conf .--conf-file flume-conf.properties --name a1 -Dflume.root.logger=INFO,console

  

flume-ng agent --conf . --conf-file flume-conf.properties --name a1 -Dflume.root.logger=INFO,console(控制台)

 

打开另一个终端:

[hadoop@master ~]$ nc localhost 44444

helloworld

OK

 

 

核心类考察

1. Source

生成Event,调用ChannelProcessor的方法,将Event putChannel中去

 

 

 

2.Sink

连接到Channel,消费里面的Event,将其发送到destination,有很多相应的sink类型你

Sink可以根据SinkgroupSinkprocessor进行分组

Sinkprocess()方法只能有一个线程访问

SetChannel() getCannel() process()

 

3.Channel

连接SourceEvent Procuder)和Sink(Event Consumer),本质上Channel就是Buffer

支持事务处理,保证原子性(Put+take

Channel是线程安全的

Put() take() getTransaction()

转载自原文链接, 如需删除请联系管理员。

原文链接:Flume的简单介绍,转载请注明来源!

0