[java] 자바와 아파치 하둡의 웹 로그 분석 예제
이 예제는 자바와 아파치 하둡을 사용하여 웹 로그 데이터를 분석하는 방법을 보여줍니다.
1. 웹 로그 데이터
웹 로그는 웹 서버에서 발생하는 각각의 요청에 대한 정보를 기록한 파일입니다. 일반적으로 웹 서버는 클라이언트에 대한 IP 주소, 접속 시간, 요청한 URL, HTTP 상태 코드 등을 로그로 남깁니다.
예를 들어, 아래와 같은 형식의 웹 로그 데이터를 가정해 봅시다:
192.168.0.1 - - [27/Feb/2022:10:00:00] "GET /page.html HTTP/1.1" 200 1234
192.168.0.2 - - [27/Feb/2022:10:00:01] "GET /image.jpg HTTP/1.1" 404 0
2. 웹 로그 분석 예제
이 예제에서는 웹 로그 데이터를 분석하여 가장 많이 방문된 URL을 찾는 기능을 구현합니다.
2.1. 자바 코드
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
public class WeblogAnalyzer {
public static class WeblogMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text url = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] fields = line.split(" ");
if (fields.length >= 7) {
url.set(fields[6]);
context.write(url, one);
}
}
}
public static class WeblogReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "weblog analyzer");
job.setJarByClass(WeblogAnalyzer.class);
job.setMapperClass(WeblogMapper.class);
job.setReducerClass(WeblogReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
2.2. 실행
위의 자바 코드를 컴파일하고, 웹 로그 데이터가 있는 HDFS 경로와 출력 디렉토리를 명령어의 인자로 전달하여 실행합니다:
$ javac -classpath hadoop-core.jar WeblogAnalyzer.java
$ jar cf weblog-analyzer.jar WeblogAnalyzer.class
$ hadoop jar weblog-analyzer.jar WeblogAnalyzer /input/weblogs.txt /output
3. 결과
위의 실행 명령어를 실행한 후, 출력 디렉토리에는 가장 많이 방문된 URL과 해당 횟수가 저장됩니다. 이를 통해 웹 사이트의 인기 있는 페이지를 파악할 수 있습니다.