Apache Flume(一)

今天详细学习一下flume,原来都是琐琐碎碎,仅限于使用。不多说,还是从官方网站开始。

Apache Flume是一个分布式、可靠的、可用的系统,该系统用来高效的收集、聚合、移动那些存储在不同数据源的大量日志数据到中心数据存储点。

Apache Flume不仅仅限于日志的数据聚合,因为数据源是自定义的。Flume可以传输大量的日志数据事件数据,不仅仅包含网络交易日志、社交媒体日志、邮件信息,还有许多其他的数据源。

Apache Flume是apache的顶级项目。

目前有两个发布的版本线,0.9x和1.x。

我们鼓励新的用户使用1.x版本,为了在最新的架构中能够利用性能的提升和配置的灵活性。

那么flume需要环境为:

1.Java运行环境,JDK1.6或者更新版本(建议JDK1.7)

2.内存,足够的内存来配置Souce、Channels、Sinks

3.磁盘空间,足够的磁盘空间来配置Channels、Sinks

4.目录权限,代理读写目录的权限

一个Flume的事件被视作一个数据流单元,该单元包含原始字节流和可选的一系列String类型的属性。一个Flume的

代理(agent)是一个(JVM)的线程,该agent拥有着一个组件,正是通过该组件,数据流才得以从外部数据源到达它

的终点(hop)。


Flume 的Souce通过类似于Web Server的外部源来消费传递给他的事件。外部源以一种目标Flume Souce识别的

格式发送给它事件。比如说,一个Avro Flume 源能够被用来接受Avro 事件,该事件来自于Avros客户端或者其他的

sink格式为Avro的Flume代理。与此类似的流可以通过使用Thrift的Flume Souce接受一个Thrift Sink或者一个基于Thrift

协议、用任何一种语言写的Flume Thrift RPC客户端来定义。当一个Flume Souce 接收到事件信息,flume把他保存到

一个或多个Channels当中。Channel是一个被动的仓库,它保存事件直到被flume sink消费。文件channel只是一个例子

--他被本地文件系统所支持。Sink 把事件从Channel中删除并把事件放入一个额外的仓库比如说:HDFS(凭借着Flume

HDFS Sink)或者把他作为下一个Flume agent的输入源。在指定的agent中的Source和Sink是异步运行的,这之间事件

在Channel中被分期(分阶段)保存。

Flume允许用户创建多hop流,在这之中事件在到达最终的终点前也会通过多个agents。他同样允许fan-in和fan-out

流,上下文路径和备份路径用来应对失败的hops。

在每个agent的channel中事件被分阶段。事件接着以流的方式被发送给下一个agent或者终端仓库(比如HDFS)。

当事件被储存在下一个agent的channel或者仓库中后才会被从本channel中删除。这就是在single-hop消息传递过程中

flume提供的点对点可靠性的保证。

Flume使用事务性的方式来保证事件传送的可靠性。Souces和Sinks和按照事务性分别得封装channel提供的事件。这

确保了一系列事件以流的方式在点对点之前传递。在多hops的情况下,来自于前一个hop的Sink和后一个hop的souce

都有他们的事务在运行来确保数据被安全的保存在下一个hop的channel中。

事件分阶段的保存在channel中,这是为了在发生错误的情况下恢复数据而使用的。flume支持一个耐久的file channel,

他被本地文件系统所支持,同样也存在一个memory-channel用来把事件简单的保存在内存队列中。在内存中会更快,

并且那些无法被恢复的数据会仍然滞留在内存中。

Flume agent配置以本地配置文件的形式被保存,这是一个text类型的文件保留着java的属性文件格式。一个或多个

agent的配置可以在相同的一个配置文件中所指定。配置文件包含:agent中的Souce、Channel、Sink以及他们如何被

衔接在一起来形成数据流。

每一个组件(Souce、Channel、Sink)在流中有一个名字、类型、和一系列属性来指明类型和实例。比如,一个Avro

的源需要一个主机名(或者IP地址)和一个待接收数据的端口号。内存channel能够指明最大队列长度,HDFS Sink需

要知道文件系统URI,路径去创建文件,文件循环的频率。所有的这些属性需要在agent的配置文件中被设置。

那么其他废话我不多说了,开始flume。首先需要下载,我这里是ubantu系统,到flume.apache.org/download.html页面

去下载,我这里下载的如图:


然后放入我的/usr/local下,然后使用命令tar -zxvf 解压,删除压缩包,然后修改名字mv apache-xxxx flume后如图

所示:


agent使用名字叫做flume-ng的shell脚本来启动,该脚本位于flume目录文件中的bin文件夹中。你需要指明agent的名

字,配置的位置目录以及相应的配置文件:

$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template
然后agent就会开始根据指定的配置文件开始运行。

下面,我们给一个简单的配置文件例子,描述了一个单节点flume的发布。该例子允许用户产生事件,随后把他们记录

到控制台。

# example.conf: A single-node Flume configuration

# 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
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

这个配置定义了一个名字叫做a1的agent。a1有一个source监听来自端口44444的数据,接着一个channel把数据缓

到内存中, 最后一个Sink把数据输出到控制台。配置文件命名了各种各样的组件,接着定义了他们的类型和配置参

数。一个给定的配置文件也许定义了许多已经命名的agent,当一个给定的flume的线程被标记的时候,一个参数将会

被传递告诉他出现的是哪个agent。

根据如上配置文件,我们如下启动flume:

$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 
-Dflume.root.logger=INFO,console

注意,在一个完整的发布过程中,我们一般多包涵一个参数:--config=<conf-dir>,<conf-dir>目录应该包含一个shell

脚本叫做flume-env.sh和一个潜在的log4j属性文件。在这个例子中,我们传递一个java操作来强制flume把结果打印在

控制台,我们不用自定义的环境脚本来运行。

新开启一个终端,我们telnet端口44444然后发送给flume事件信息:


原始的flume终端将会输出我们输入的信息:


那么到这里,恭喜你已经成功配置和发布了flume agent。

那么接下来我本地演示一下,进入我本地flume(上面提到了修改文件夹名字,不然太长)的conf文件,里面还有文

件如下:


这里把flume-conf.properties.template这个文件重命名为flume-conf.properties,然后查看文件修改为如前文所述:

然后我们使用前面使用的启动命令启动:


这证明我们成功启动了,这里需要注意一下,如果出现以下问题:


我想极大可能你没有在flume的根目录下进行如上的命令,也就是说你可能跑到/bin 、/conf 或者flume之外的目录进行

操作,就会报这个问题,感觉可能他的shell脚本中有些路径是相对路径,所以报错,在flume/目录下进行操作应该不

会出现这个问题。

然后我们重新启动另外一个终端,然后启动telnet然后输入内容操作如图:


然后我们可以在flume的终端哪里看见输入的内容如下:


到这里,官网的第一个例子完美完成。

感谢开源


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值