본문 바로가기

System/Linux

PacketCount 예제

public class PacketCount {

public static class Map extends Mapper< LongWritable, BytesWritable, Text, IntWritable > {

private final static IntWritable one = new IntWritable(1);

PacketStatsWritable ps = new PacketStatsWritable();

public void map(LongWritable key, BytesWritable value, Context context) {

if(value.getBytes().length<MIN_PKT_SIZE) return;

ps.parse(value.getBytes()); // 패킷 각 필드 추출

context.write(p.getSrc_ip(), one);

}

}


public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {

public void reduce(Text key, Iterable<IntWritable> values, Context context)

throws IOException, InterruptedException {

int sum = 0;

for (IntWritable val : values) {

sum += val.get();

}

context.write( key, new IntWritable(sum));

}

}


public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

Job job = new Job(conf, "wordcount");

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

job.setMapperClass(Map.class);

job.setReducerClass(Reduce.class);

job.setInputFormatClass(PcapInputFormat.class);

job.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

job.waitForCompletion(true);

}

}