之前学习Hadoop的时候,使用MapReduce做了一个track.log日志文件的数据清洗实例,按照我们的需要提取出有用的日志数据,这里我们使用Storm来实现同样的功能。
具体源代码请关注下面的GitHub项目
数据清洗的目标
这里我们期望将下面的track.log日志文件内容转化一下,将logs外层结构去掉,提起出来logs的内层数据,并且将原来的logs下的数组转换成多条新的日志记录。
track.log日志文件
|
|
期望清洗之后的文件内容如下
|
|
AdLog实例程序
实例程序请参考GitHub上的源代码
这里我们使用Maven来打包构建项目,同之前的MapReduce相关实例是一个项目,我们用了分开在不同的package中。
|
|
runAdLog.sh脚本文件
|
|
注意:这里使用的集群模式运行的,inputfile文件需要上传到Storm的Supervisor机器上,否则Storm运行的时候会找不到inputfile文件。
执行Shell脚本之后,可以在Storm UI中查看到Topology Summary中多了一个AdLog Topology,Topology Id是AdLog-1-1479198597,我们找到Supervisor机器上的log日志(${STORM_HOME}/logs),该日志目录下会根据Topology Id生成对应的日志文件如下:
- AdLog-1-1479198597-worker-6703.log
- AdLog-1-1479198597-worker-6703.log.err
- AdLog-1-1479198597-worker-6703.log.metrics.log
- AdLog-1-1479198597-worker-6703.log.out
我们可以查看一下AdLog-1-1479198597-worker-6703.log日志,我们代码中的日志输出都在这个日志文件中,可以看到Storm集群读取我们指定的inputfile,并且按照指定方式提取我们需要的日志。
|
|
Storm数据清洗运行成功后,需要像之前一样kill掉AdLog Topology之后才会调用cleanup方法将清洗后的日志输出到outputfile文件中
|
|
查看一下我们所期望的结果文件的内容
|
|