有效地解析巨大的日志

时间:2013-11-27 11:47:40

标签: scala parsing parallel-processing machine-learning bigdata

我有巨大的日志文件(在演出中)有一个标题(标记信息的开头)然后信息如下。这是随机分布在整个文件中(意味着标题后跟信息可以出现在日志文件中的任何位置)。它也有一个父子层次结构。我需要根据写入的正则表来解析和处理此日志的信息,以识别节/标题的开始模式,从而处理将要跟随的信息。这里的问题是我必须匹配为所有写的所有正则数据集每个日志行文件的部分,以确定触发哪个部分。 这种方法非常缓慢并且也遇到了问题,因为没有明智的想法接下来会出现在日志中,并且当存在层次结构时它会放大。我想到了的方法通过递归地划分文件(分而治之)并将其分配给多个 actor(scala)来索引文件,并且每行可以与所有正则表达式并行匹配(代表开头)我希望知道这种方法的效率如何,希望有更多的输入来提高性能。这里的参考是日志文件可能出现的模式::

Section1
--------------
Info for section1
..
...
....
.
.
Section2
--------------
Info for section2
..
...
....
.
.
Section3
=================
Info for section3

Child1 of section3
--------------
Info for child of section3

Child2 of section3
----------------
Info for child of section3

Child1 of child2 which is child of section3
.........................
Info for child1 of child2 which is child of section3

Section1
--------------       //Section1 reappears
Info for section1
..
...
....
.
.

1 个答案:

答案 0 :(得分:-1)

您需要更改文件格式。我建议将其作为结构化数据存储在RDBMS或MongoDB中作为最简单的解决方案,但如果您想使用自己的日志格式,则需要对其进行构造,以便了解每个块的开始和结束,以及/子编号是结构化的,因此您不需要使用正则表达式。

这是一种可能的解决方案。每个单独的块都是一个JSON对象,并存储在自己的行中。因此,您文件中的行可能如下所示:

{"section": "1", "path": "/", "info": "Info for section1\nNext Line of info\nAnd so on..."}
{"section": "3", "path": "/child2/child1", "info": "Info for child1 of child2 which is child of section3"}