繁体   English   中英

如何提高使用mapreduce分析日志文件的性能

[英]how to improve performance in analysing log file using mapreduce

我们必须使用hadoop分析日志文件,因为它可以轻松处理大量数据。 因此,我编写了一个mapreduce程序。 但是,即使我的mapreduce程序也花费大量时间来获取数据。

String keys[] = value.toString().split(" ");
        int keysLength = keys.length;
        if(keysLength > 4 && StringUtils.isNumeric(keys[keysLength-5])) {
            this.keyWords.set(keys[0]+"-"+keys[1]+" "+keys[2]+" "+keys[keysLength-5]+" "+keys[keysLength-2]);
            context.write(new IntWritable(1), keyWords);
        }

要求是,我们最多将有10到15个.gz文件,每个.gz文件中都包含一个日志文件。 我们必须从该日志文件中提取数据以进行分析。

在日志文件中输入样本

2015-09-12 03:39:45.201 [service_client] [anhgv-63ac7ca63ac] [[ACTIVE] ExecuteThread:队列的'0':'weblogic.kernel.Default(自调整)'] INFO TempServerImplementation-|| 服务器:loclhost 121.1.0.0 | 服务类别:测试| 服务方法:添加| 应用ID:测试| 状态码:200 | 持续时间:594ms ||

因此有人可以帮助我如何调整性能。

谢赛

您可以尝试使用SPARK(我们可以认为这是在内存映射减少中),它比传统Map减少快10到100倍。 使用前,请检查hadoop map-reduce和SPARK之间的权衡。

您可以通过两种主要方法来加快工作速度, 输入大小变量初始化

输入尺寸

gz不是可拆分格式。 这意味着,如果您有15个输入gz文件,则将只有15个映射器。 从注释中可以看到,每个gz文件为50MB,因此在10:1的压缩比下,每个映射器将处理500MB。 这可能会花费一些时间,并且除非您的节点集群少于15个,否则您的节点将无所事事。 通过在MR作业之前解压缩数据,您可以拥有更多的映射器,这将减少运行时间。

变量初始化

在下面的行中:

context.write(new IntWritable(1), keyWords);

通过为每个输出分配一个全新的IntWritable ,您将引起巨大的IntWritable 相反,为什么不将其分配在班级顶部? 它不会改变,因此不需要每次分配。

例如:

private static final IntWritable ONE_WRITABLE = new IntWritable(1);
...
context.write(ONE_WRITABLE, keyWords);

您使用的字符串- " ""-"同样适用。 也将它们分配为静态变量,并再次避免每次都创建新的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM