在大数据学习阶段,Flume作为日志采集的重要组件之一,是必学的一个部分。在Hadoop生态当中,Flume负责日志采集,算是不可或缺的辅助工具。今天的大数据开发学习分享,我们主要来讲讲Flume日志采集框架。
在一个完整的离线大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统。
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统
Flume支持在日志系统中定制各类数据发送方,用于收集数据;
Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
重构后的版本统称为Flume NG(next generation);改动的另一原因是将Flume纳入apache旗下,cloudera Flume改名为Apache Flume。
官方网站:http://flume.apache.org/
Flume框架结构
Flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。
Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成。
Flume构成组件
Client
Client生产数据,运行在一个独立的线程。
Event
一个数据单元,消息头和消息体组成。(Events可以是日志记录、avro对象等。)
Flow
Event从源点到达目的点的迁移的抽象。
Agent结构
Flume运行的核心是Agent。Flume以agent为最小的独立运行单位。一个agent就是一个JVM。它是一个完整的数据收集工具,含有三个核心组件,分别是source、channel、sink。通过这些组件,Event可以从一个地方流向另一个地方。
Source
Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event)里,然后将事件推入Channel中。Flume提供了很多内置的Source,支持Avro,log4j,syslog和http post(body为json格式)。可以让应用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。如果内置的Source无法满足需要,Flume还支持自定义Source。
Channel
Channel是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上,直到Sink处理完该事件。两个较为常用的Channel,MemoryChannel和FileChannel。
Sink
Sink从Channel中取出事件,然后将数据发到别处,可以向文件系统、数据库、hadoop存数据,也可以是其他agent的Source。在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。
关于大数据开发学习,Flume日志采集框架,以上就为大家做了简单的介绍了。在现有的大数据技术生态当中,Flume必学,且对于框架内部的实现机制,也要多去理解和掌握。
网友评论