开发者学堂课程【Flume 基础应用实战-企业全场景解决方案:Apache Flume- 软件概述】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/715/detail/12765
Apache Flume- 软件概述
内容介绍:
一、Flume 概述
二、小结
一、Flume 概述
1、Flume 产生背景:
Flume 是一款在大数据生态圈当中非常给力的辅助软件,在介绍 Flume 这款软件的工作性质之前,先从它的官网上猜想一下,Flume 这款软件的用途。
打开浏览器,通过域名可以发现 Flume 是 Apache 的一个顶级项目,在首页的左上角就是 Flume 的 logo 图片。这个图片看上去很简单,上面是一段木材,木头下面有一些水花,好像是在河面上,那这样一个简单的图片跟 Flume 的工作性质会有什么关系?它为什么能够表示 Flume?
这时来猜想一个生活中的场景,我国北方的大兴安岭森林的深处,有好多的木材需要砍伐,运输出来,但是当地的铁路,包括公路运输都不太方便,这时候怎么把木材运输出来?当地百姓非常聪明,他们借助河道水流的方式,把木头变成一个个木排绑定起来,扔在河面上,然后木材就被沿着水流、顺着河道运输出来。这个说法在当地叫做木排。
如上图:木桶绑在一起,沿着河道就可以流转出来,这个图片背后所包含的一个思想就是木材传递的过程,把木材从一个地方借助河面传递到另外一个地方,那到底这个木排的 logo 跟 Flume 有什么关联?
在大数据体当中,其实可以把它划分为两个阵营,第一个阵营,就是各个地方能够产生数据的地方,称它为数据源,比如爬虫,服务器日志,各种传感器等。另外一个阵营是用来消费使用数据的,比如 spark,甚至是数据挖掘机器学习等,这时候一旦涉及到生产数据、消费数据的就一定会有一个数据流转的过程,要把数据从产生的地方搬到使用的地方去,最后该怎么去完成它?
可以使用现有脚本,甚至自己手动地来移动,甚至在不同的地方用移动硬盘来移动,这些回答都没有任何问题,但是是否能有一款软件可以协助去做日志的采集、传递和传输的过程,而且非常方便好用,这就是 Flume 产生的背景。
2、Flume 的定义与用途:
Flume 是一个用来海量日志采集和传输的软件,所谓的采集传输,指把数据从一个地方传递到另一个地方,相当于做一个数据搬运的过程。Flume 在生态圈当中变得非常好,非常给力,可以帮助解决很多不必要的工作的时间和麻烦。
3、Flume 的三个核心组件:
比如有一个服务器能够产生日志,把它称之为 WebServer,公司部署了一台服务器,它就会在这个服务器的某个路径下产生访问,比如 access.Iog,这时还有一个存储系统叫做 HDFS,是分式文件系统,比如有个需求,需要自己每天凌晨一点钟把前一天产生的日志文件进行采集,传递到 HDFS 某个路径下。比如在这里,定一个叫 data(/data/weblog)的路径,比如下面给出一个日期,20181101,可以用脚本完成,那么如果设计一个类似于 Flume 这样采集搬运的软件,大概需要哪些东西?
(1)首先一定需要一个组件来对接数据源,能够去采集监听接触到数据的东西,这一个用来对接数据源的称为 Source。
(2)除此之外,还要把数据搬运到指定的地方,还需要一个组件把数据放到 HDFS上,把数据存放的目的地(专业说法叫数据下沉地),叫做 Sink。
(3)实际上有以上两个组件就可以了,但是想一个更加灵活的场景,比如数据源一秒钟能够收集两条数据,而目的地一秒钟只能放一条数据,那么随着时间的流逝,收集的数据越来越多,存的越来越慢,会产生数据的挤压积累的过程,为了更好的去缓解两个中间数据挤压的过程,这时候中间会做一个临时缓存,因此这时候为了方便要再设计一个组件叫做 Channel。
有它存在之后 Source 采集的数据放在这里面,然后它从这里面再去读数据,把临时缓存数据的地方叫做 Channel 管道。这三个组件加起来就是 Flume 的组件核心,Flume 就是靠这三个组件来去完成数据采集和搬运的过程,而且大家不用担心它里面到底怎么去开发,怎么去使用大家要做的就是配置各种各样的数据。
如上图,表示的非常的生动形象,左边是web服务器产生数据的地方,右边 HDFS数据的地方,中间做一个数据搬运的过程,有三个组件,一个用来对接数据源,一个用来对接存放的的目的地,一个用于中间做临时的缓存,这三个组件就是 Flume的核心。
Flume 可以帮助我们减少很多开发量,而且 Flume 当中满足了大多数常见的数据,Source 不仅能对接日志,还支持了很多各类型的数据,同样,存放的目的地也不仅仅包括 HDFS,还可以包括卡夫卡等。因此,官方开发的组件种类越多,功能就越强大,我们使用起来也越加方便。更加强大地是它还开放了制定的功能,如果它不满足,用户也可以自己去定义开发这些东西。因此在大数据生态圈中,一旦涉及到数据采集,搬运传输的过程,使用 Flume 会是非常方便的。
4、Flume 的一个小插曲:
Flume 有一个小插曲,通过刚才的名字发现它叫做 Apache Flume,事实上 Flume以前来自于一家叫做 Cloudera 的商业公司。当前 Flume 有两个版本,一个是之前的 Flume 0.9X 版本,统称 Flume OG(original generation),一个是 Flumel.X 版本,统称 Flume NG(next generation)。由于 Flume NG 经过核心组件、核心配置以及代码架构重构,与 Flume OG 有很大不同,使用时请注意区分。改动的另一原因是将 Flume 纳入 apache 旗下,Cloudera Flume 改名为 Apache Flume,它也成为 Apache 的一个顶级项目当别人没有特别强调时,一般指的是 Apache Flume。
二、小结
1、定义:
Flume 是一款大数据中海量数据采集、传输、汇总的软件,采集特别指数据流转或者数据搬运的过程,也就是把数据从一个存储介质通过 Flume 传递到另一个存储介质。
2、核心组件:
(1)Source: 用来对接各个不同的数据源。
(2)Sink: 用来对接各个不同存储数据的目的地,专业的说法叫数据的下沉地,下沉非常生动形象的描述了数据存放的过程。
(3)Channel: 用于临时存储缓存数据。