在上一篇 2、项目技术选型和项目架构 中,确定了项目使用的技术架构,接下来要开始实践了。根据里面的架构图,第一步是使用flume来采集web 服务器上的日志。
因为一般的web服务器是不和Hadoop集群放在一起的,所以需要使用一个 flume agent 放在web服务器上,采集之后再传到Hadoop集群上的Flume,flume再把数据发送给Kafka。这里的2个Flume就形成了串联。
一、flume采集架构图
在服务器A上放一个flume agent,用来采集日志 data.log ,采集之后串联Hadoop集群上的Flume,把数据写到集群的Kafka。
二、日志自动生成
使用Java代码(也可以使用scala、python等),编造日志,日志格式如下(实际中每个数据之间是用 \t 分隔的,下面是为了方便展示用逗号):
(ip,yyyy-MM-dd HH:mm:ss,url,statuCode,referer)
(48.10.89.198 2019-11-26 17:29:01 "GET /class/121.html HTTP/1.1" 205 https://www.baidu.com/s?wd=Hadoop基础)
- ip:IP地址,从一个数组随机取,然后拼接成ip地址
- yyyy-MM-dd HH:mm:ss:时间,取当前时间
- url:/class 开头的才是要的课程,其他开头的不需要;从一个数组中随机取id,如121,然后前面拼接上GET和后面拼接上HTTP/1.1
- statuCode:http的返回状态码,有200、404、500等,从一个数据中随机取
- referer:从不同搜索引擎过来的,从一个数组随机取
Java实现很简单,除了时间是直接拿当前的,其他数据都从各自的数组中随机取一个,然后拼接成一条日志数据,把数据写入到文件中,将这个步骤重复10次。最后把这个java类打成jar包,放在服务器上,每分钟跑一次,一两天之后就有几万条数据了。
## 每分钟跑一次任务,cron.sh里面的内容是:
:<<!
#!/bin/bash
source /etc/profile
java -jar /home/ylqdh/project_jars/logGenerator.jar /usr/local/web/data.log
!
*/1 * * * * /home/gwnet/project_jars/cron.sh
## 如果不懂这个,建议先学习一下 linux crontab的用法
这个 LogGenerator.java 代码放在我的github上 ylqdh的Github。
三、Flume采集的配置文件写法
服务器A上flume的采集配置文件 exec-memory-avro.conf ,如下:
exec-agent.sources = exec-source
exec-agent.channels = exec-channel
exec-agent.sinks = exec-sink
## sources
exec-agent.sources.exec-source.type=exec
exec-agent.