在企业级的平台系统当中,对于日志的收集和分析,一方面对于运维优化有着相应的作用,另一方面日志数据,作为大数据的一种形式,也蕴含着诸多价值。今天的大数据开发学习分享,我们就主要来讲讲,Flume分布式日志系统。
Flume出自Cloudera公司,现如今已经是Apache的顶级项目。市面上与Flume相似的日志收集系统还有Facebook Scribe、Apache Chuwka等。但是在大数据平台系统当中,Flume的应用程度还是占据主流市场的。
Flume OG和Flume NG
提到Flume,也许有人听过两个版本,一个是Flume OG,一个是Flume NG。
Flume初始的发行版本目前被统称为Flume OG(Original Generation),属于Cloudera。
而2011年10月22日,Cloudera完成了Flume-728,对Flume进行了里程碑式的改动:重构核心组件、核心配置及代码架构,重构后的版本统称为Flume NG(Next Generation)。
Flume NG的架构
Flume采用了分层架构,分别为Agent、Collector和Storage。其中,Agent和Collector均由Source和Sink两部分组成,Source是数据来源,Sink是数据去向。
Flume使用了两个组件:Master和Node。Node根据在Master Shell或Web中的动态配置,决定其是作为Agent还是作为Collector。
Agent的作用是将数据源的数据发送给Collector。
Collector的作用是将多个Agent的数据汇总后,加载到Storage中。它的Source和Sink与Agent类似。
Storage是存储系统,可以是一个普通File,也可以是HDFS、Hive、HBase、分布式存储等。
Master负责管理、协调Agent和Collector的配置信息,是Flume集群的控制器。
注:Flume框架对Hadoop和ZooKeeper的依赖只存在于JAR包上,并不要求Flume启动时必须将Hadoop和ZooKeeper服务同时启动。
Flume核心概念
1.Agent:使用JVM运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
2.Client:生产数据,运行在一个独立的线程。
3.Source:从Client收集数据,传递给Channel。
4.Sink:从Channel收集数据,运行在一个独立线程。
5.Channel:连接sources和sinks,这个有点像一个队列。
6.Events:可以是日志记录、avro对象等。
Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成。
值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。
比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS,HBase,甚至是另外一个Source等等。Flume支持用户建立多级流,也就是说,多个agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes。
关于大数据开发学习,Flume分布式日志系统,以上就为大家做了简单的介绍了。Flume组件在大数据技术生态当中占据重要位置,因而在大数据学习当中,也需要给以足够的重视。