Java 映射代码以从日志文件的每一行中筛选出某些字段
下面是我的java映射代码,用于hadoop从日志文件的每一行中过滤出某些字段Java 映射代码以从日志文件的每一行中筛选出某些字段,java,regex,hadoop,Java,Regex,Hadoop,下面是我的java映射代码,用于hadoop从日志文件的每一行中过滤出某些字段 public class TAnalyser { public static class TMapper extends Mapper<Object, Text, Text, IntWritable>{ public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> ou
public class TAnalyser {
public static class TMapper
extends Mapper<Object, Text, Text, IntWritable>{
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException,InterruptedException {
String LogEntryPattern=("(srcip=(?:\\\\d+\\\\.)+\\\\d+)(?:.*)?(dstip=(?:\\\\d+\\\\.)+\\\\d+)(?:.*)?(dstport=(\\\\d+))(?:.*)?(status=\\\\w(?:.*))");
String LogEntryLine=value.toString();
Pattern p=Pattern.compile(LogEntryPattern);
Matcher matcher = p.matcher(LogEntryLine);
System.out.print(" " + matcher.group(1) + " " );
System.out.print(" " + matcher.group(2) + " " );
System.out.print("status=close" + matcher.group(4) + " " );
System.out.println(" " + matcher.group(3));
}
}
}
公共类事务分析器{
公共静态类TMapper
扩展映射程序{
公共void映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)抛出IOException、InterruptedException{
字符串LogEntryPattern=(“(srcip=(?:\\\\d++\\\\\)++\\\\d+(:*)(dstip=(?:\\\\d++\\\\)++\\\\d+(:*)(dsport=(\\\\\d+)(?:*)(状态=\\\w(?:*));
字符串LogEntryLine=value.toString();
模式p=Pattern.compile(LogEntryPattern);
Matcher-Matcher=p.Matcher(对数线);
系统输出打印(“+matcher.group(1)+”);
System.out.print(“+matcher.group(2)+”);
系统输出打印(“状态=关闭”+匹配器组(4)+”);
System.out.println(“+matcher.group(3));
}
}
}
下面是一个示例输入文件inp.txt
201410.100.2.3date=2014-01-16,time=11:26:14,devname=B39001569,devid=B39001569,logid=000013,type=traffic,srcip=192.168.192.12,srcport=22,srcintf=port2,dstip=10.180.1.10,dstport=3106,dstintf=port1,sessionid=121543,status=close,policyid=196,service=MYSQL,proto=6,duration=10,sentpktbyte=3910,rcbyte=175085,vdpkt=132”
201410.100.2.3date=2014-01-16,time=11:26:14,devname=B39001569,devid=B39001569,logid=000013,type=traffic,srcip=192.168.192.13,srcport=209,srcintf=port2,dstip=10.180.1.15,dstport=206,dstintf=port1,sessionid=123,status=warning,policyid=196,service=MYSQL,proto=6,duration=10,sentbyte=3910,rcvdbyte=175085,sentpkt=132,rcvdt“
我已经给出了正则表达式,将输入作为字符串,编译并匹配了模式。但我需要过滤掉并只打印那些在状态字段中包含“警告”的行
在hadoop中运行此文件时,会显示以下错误
线程“main”java.lang.NoSuchMethodException中的异常:tanalyser.tanalyser.main([Ljava.lang.String;)
位于java.lang.Class.getMethod(Class.java:1655)
位于org.apache.hadoop.util.RunJar.main(RunJar.java:154)
我被它卡住了。任何建议都会非常有用。谢谢。你能检查一下你的代码中的静态类声明吗 公共静态类TMapper 扩展映射器{
似乎不对。你能把它放在一个单独的类中,而不是放在一个内部类中,看看这是否有帮助吗?你能发布整个错误日志吗?