开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第二阶段):网站流量日志 Flume 收集--配置文件编写和实操】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/694/detail/12185
网站流量日志 Flume 收集--配置文件编写和实操
创建 flume 配置文件
在桌面上创建新的 flume 配置文件,这个文件是从 taildir sourse 进行采集和上传的,所以应该命名为taildir_sourse_hdfs_sink.txt
,如果用户看到地址,就可以见名之意知道文件是使用taildir sourse
进行采集然后上传到hdfs当中。flume的编写就是里面三个组件具体的描述,都描述清楚就可以进行数据的采集。以flume当中的参考文件,将例子做相关的修改。打开参考资料中的软件里面有一个flume文件夹,选择flume conf
,选择tail-hdfs.conf
,以这个为例,复制里面的内容,这里面是flume的一些配置,需要结合实际场景进行修改,复制出来替换到文件当中,然后进行修改。首先针对三个组件做一个名字命名描述,sourse叫r1,sink叫k1,channel叫c1。接下来针对这三个组件做一个具体描述。
1.首先去描述 sourse,如下:
al.sources = r1
al.sources.r1.type = TAILDIR
al.sources.r1.channels = c1
al.sources.r1.positionFile = /var/log/flume/taildir_position.json
al.sources.r1.filegroups = f1 f2
al.sources.r1.filegroups.f1= /var/log/test1/example.log
al.sources.r1.filegroups.f2 = /var/log/test2/.*log.*
(1)首先第一个a1sourse就是r1,这个参数刚才已经命名过了,所以这个不需要。
(2)第二个r1的类型等于 TAILDIR,这是核心的,需要保留。
(3)第三个r1绑定的 channel 叫做c1,发现后面已经做了绑定了,所以这里就没有必要重复了,所以去掉。
(4)第四个断点续传文件的路径在这个路径下,然后下面定义了两个文件组,一个叫f1一个叫f2。f1这里用来指向具体文件,f2指向的是文件夹路径,还支持正则匹配。这些都是核心配置,因此这几个保留,把之前的删去,这样就把sourse定好了,是一个 tail sourse。
修改后的程序为:
al.sources.r1.type = TAILDIR
al.sources.r1.positionFile = /weblog/flume/taildir_position.json
al.sources.r1.filegroups = f1 f2
al.sources.r1.filegroups.f1= /weblog/test1/example.log
al.sources.r1.filegroups.f2 = /weblog/test2/.*log.*
2.下面介绍 hdf 的 sink 相关的组件。
最下面是 memory,使用的是内存级别的缓存。把采集到数据放在内存当中进行绑定,写完之后对参数做具体的修改。为了方便,路径尽量不要写太长的路径。改为weblog 路径下,那么收集的这个文件在 weblog 路径下叫做 test1,同样的下面的路径也改为 weblog,把上面断点续传的信息文件同样也保存在 weblog 路径下。
如果在企业当中,应该把这个文件保存在一个靠谱的路径下,不要保存在缓存路径下。比如放在 table 路径下,一旦它被清除,断点续传功能就失效了。下面把数据上传到采集到hdf上去,channel=c1
,其实这一块下面已经绑定了所以不需要再写一遍了,删除。下面是上传的路径,为了方便,对这个路径进行统一命名,叫做weblog 路径下,这两级路径是在动态获取时间。文件名的前缀改为itcast-
。下面这三个属性叫做开启十分钟之内的属性,比如文件夹会十分钟滚动一个。
再下面是文件滚动,分别是间隔、大小以及count,这里需要做一个要求,当三个属性都配置的时候要实现谁先满足谁先触发。在企业当中,通常会以一个角度来维护,比如:在使用flume采集数据到hdfs的时候,要求以文件大小进行滚动,大小为128M,文件正好以一个块的大小进行滚动,非常方便。
对需求进行配置:把时间间隔和数量都改为零,这里文件大小的单位是字节,所以不能直接写128M,
需要进行换算,换算结果为134217728,也是文件默认的块的大小。将这个修改复制到 hdfs 文件当中。这就完成了相关配置文件的组装。
修改后的程序为:
a1.sinks.k1.type =hdfs
a1.inks.k1.hdfs.path= /weblog/%y-%m-%d/%H-%M/
a1.sinks.k1.hdfs.filePrefix = itcast-
a1.sinks.kl.hdfs.round =true
a1.sinks.k1.hdfs.roundValue =10
a1.sinks.k1.hdfs.roundUnit=minute
a1.sinks.k1.hdfs.rollInterval=0
a1.sinks.k1.hdfs.rollSize = 134217728
a1.sinks.kl.hdfs.rollCount 0
3.接下来把这个配置文件上传到 flume 的配置文件当中进行启动,看是否能进行数据的收集。
打开服务器,flume 安装在 node1载机上,路径为cd/export/servers/flume
,在这个当中有一个 flume 的文件夹,cd 到 conf 路径下,把采集方案放到这个路径下,采集方案就是桌面上新建的采集方案,上传。
上传之后为了确保正常,建议使用cat命令查看一下有没有问题。检测一遍当中有没有参数写错,有没有路径不对,主要要求是心细。
确定没有错误之后就去启动,但是启动之前要注意,如果文件夹不存在是会报错的,文件夹是 weblog根目录下的两个文件,一个叫test1,一个叫test2,所以需要克隆绘画来创建两个文件夹。
首先mkdir -p/weblog/test1,mkdir -p/weblog/test2
,cd到weblog当中去看一下,显示已经有了test1和test2,flume删除掉(rm -rf flume)
,
这个 flume 中保存的就是之前断点续传的路径。查看这两个文件中有没有多余的文件,有的话需要删除,先cd../ test1
,显示有文件,使用rm -rf
将其删掉;对test2进行相同的操作。
确保初始环境是正常使用的才能看到一些现象,回到 node1来进行 flume 的启动,因为没有配置 flume 的环境变量,所以只能在根目录上启动,启动命令参考之前的配置文件,需要做一些修改。
使用 bin 目录下的 flume-ng 进行启动,重点就是里面的参数,把命令复制下来,看一下哪里需要进行修改。首先 bin 下的flume-ng
没有问题,配置文件方案在 conf路径下,名字应该改为taildir_sourse_hdfs_sink
,回车。
这样就成功启动 flume了。现在不管是监控的文件还是文件夹都没有数据发生变化,所以现在 flume 并没有进行数据的收集。这时候为了方便,打开 hdfs 的页面端口50070,搜一下 node1,打开一个 web 浏览页面,看数据能不能收集。用来监控的文件夹叫做 weblog 路径下的 test2,它的路径的正则匹配叫做.*log.*
,查看数据文件叫access.log.20181101.dat
,正好匹配这个路径。一旦把这个文件放到他监控的文件下面,就会生成一个新的文件,那么就能进行数据的收集。使用cp复制,把access.log
买点采集的数据复制到 weblog 下的 test2,一回车,相当于这个路径当中产生了一个新的文件,而这个文件的格式正好符合它正则匹配里面的格式,这时候就会进行数据的采集工作,把数据采集到hdfs路径下,发现当前并没有这个路径,试验是否能够进行采集,回车。
当复制过来时,会发现 node1的窗口有信息,开始进行相关数据编写,通过页面来验证一下是否可行。打开 hdfs 页面,刷新,发现多了一个文件夹 weblog,
打开有日期,前缀是itcast,与配置的内容一样,后面是文件的序列号,但是文件后面有个.tmp,说明这个文件是一个临时文件,因为设置的是以文件大小进行滚动,也就是满足128M之后才会进行滚动,但是当前数据并没有128M,使用ll -h去验证,
发现这个数据只有2.9M,不满足滚动的条件,所以这个文件会一直处于临时状态,必须满足128M之后,这个文件才会结束,然后打开一个新的文件写数据。这就有了一个小的弊端,在企业当中,如果数据真的就没有128M,恰好只有100M,50M,不能一直保持临时状态,那要怎么样来控制滚动。这样就完成了数据通过flume的采集,还可以去验证一下如果想去监控文件,也可以把这个路径上的文件做个动态变化。
4.断点续传文件的保存
打开服务器,cd 到 weblog 下 flume,发现这个路径下会有它自己保存的一个.json的文件,使用 cat 命令查看一下这里保存的文件位置信息。
pos就是偏移量,这些信息后面如果出了故障,就能够知道收集到哪里,从哪里继续来读,支持断点续传。这就是数据采集的第二种理解叫做数据搬运的采集。在企业当中就可以通过配置flume把路径指向买点采集以及服务器认识的路径,一旦有滚动,就把数据动态的采集上传到指定的路径下,完成数据采集,传输,汇总的一个过程。
5.小结:
这就是 flume 的新组件 taildir,重点理解里面的两个功能,一个是断点续传,一个是做两个组件的整合。