반응형
- 툴러너는 맵리듀스에 필요한 사용자 정의 변수 등을 활용하기 위해 사용한다.
- 맵리듀스 전체 전역 변수 활용에 사용.
- 툴러너를 통해 정의한 Configuration 객체는 Mapper, Reducer 객체에서도 사용이 가능하다.
- Mapper와 Reducer는 setup과 cleanup 함수를 통해 활용
- 툴러너?
- 기존 드라이버 파일에 환경설정 관련 내용을 감싸서 처리한다.
- 기존 드라이버 파일에 환경설정 관련 내용을 감싸서 처리한다.
- 툴러너 관련 import 자바 객체
import org.apache.hadoop.conf.Configured; (클래스)
import org.apache.hadoop.conf.Configuration; (클래스)
import org.apache.hadoop.util.Tool; (인터페이스)
import org.apache.hadoop.util.ToolRunner; (클래스)
사용.
- Configured 상속
- Tool 구현
- Run 함수 구현
- Main 함수 수정
- Run 함수 수행하도록 변경
- 주요 설정은 Driver 파일에 적용한다.
package hadoop.MapReduce.tool;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
* 맵리듀스를 실행하기 위한 Main 함수가 존재하는 자바 파일
* 드라이버 파일로 부름
*/
public class WordCount2 extends Configuration implements Tool {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("분석할 폴더(파일) 및 분석 결과가 저장될 폴더를 입력해야 합니다.");
System.exit(-1);
}
int exitCode = ToolRunner.run(new WordCount2(), args);
System.exit(exitCode);
}
@Override
public void setConf(Configuration conf) {
// App 이름 정의
conf.set("AppName", "ToolRunner Test");
}
@Override
public Configuration getConf() {
//맵리듀스 전체에 적용될 변수를 정의할 때 사용
Configuration conf = new Configuration();
//변수 정의
this.setConf(conf);
return conf;
}
@Override
public int run(String[] args) throws Exception {
Configuration conf = this.getConf();
String appName = conf.get("AppName");
System.out.println("appName = " + appName);
// 맵리듀스 시랳ㅇ을 위한 잡 객체를 가져온다.
// 하둡이 실행되면, 기본적으로 잡 객체를 메모리에 올린다.
Job job = Job.getInstance(conf);
// 맵리듀스 잡이 시작되는 main 함수가 존재하는 파일 설정
job.setJarByClass(WordCount2.class);
// 맵리듀스 잡 이름 설정, 리소스 매니저 등 맵리듀스 실행 결과 및 로그 확인할 때 편리
job.setJobName(appName);
// 분석할 폴더(파일) -- 첫 번째 파라미터
FileInputFormat.setInputPaths(job, new Path(args[0]));
// 분석 결과가 저장되는 폴더(파일) -- 두 번째 파라미터
FileOutputFormat.setOutputPath(job, new Path(args[1]));
// 맵리듀스의 맵 역할을 수행하는 Mapper 자바 파일 설정
job.setMapperClass(WordCount2Mapper.class);
// 맵리듀스의 리듀스 역할을 수행하는 Reducer 자바 파일 설정
job.setReducerClass(WordCount2Reducer.class);
// 분석 결과가 저장될 때 사용될 키의 데이터 타입
job.setOutputKeyClass(Text.class);
// 분석 결과가 저장될 때 사용될 값의 데이터 타입
job.setOutputValueClass(IntWritable.class);
// 맵리듀스 실행
boolean success = job.waitForCompletion(true);
return (success ? 0 : 1);
}
}
WordCount2.java
package hadoop.MapReduce.tool;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCount2Mapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
// 분석할 파일의 한 줄 값
String line = value.toString();
// 단어 빈도수 구현은 공백을 기준으로 단어로 구분함
// 분석할 한 줄 내용을 공부개으로 나눔
// word 변수는 공백을 나눠진 단어가 들어감
for (String word : line.split("\\W+")) {
if (word.length() > 0) {
// Suffle and Sort로 데이터를 전달하기
// 전달하는 값은 단어와 빈도수(1)를 전달달
context.write(new Text(word), new IntWritable(1));
}
}
}
}
WordCount2Mapper.java
package hadoop.MapReduce.tool;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class WordCount2Reducer extends Reducer<Text, IntWritable, Text, IntWritable> {
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int wordCount = 0;
for (IntWritable value : values) {
wordCount += value.get();
}
context.write(key, new IntWritable(wordCount));
}
}
WordCount2Reducer.java
hadoop jar mr.jar hadoop.MapReducer.tool.WordCount2 /comedies /result4
기존에 업로드 된 mr.jar 파일을 삭제하고 새로 빌드하고 hadoop에 넣어준다.
hadoop fs -ls /result4
hadoop fs -cat /result4/*
툴러너 적용 결과를 실행해 본다.
https://ohju96.notion.site/ToolRunner-9d8c6cd6c0764ec39b6b56e69c8b712b
반응형
'Data Base > Hadoop' 카테고리의 다른 글
[Hadoop] : URL 전송 결과가 성공인 요청 분석하기 (0) | 2022.05.03 |
---|---|
[Hadoop] : 맵리듀스 제어 함수, setup, cleanup (0) | 2022.05.03 |
[Hadoop] : 하둡, 맵리듀스 프로젝트 IP 별 호출 빈도 수 분석하기 (0) | 2022.04.28 |
[Hadoop] : 하둡, 맵리듀스 프로젝트, 3글자 이상인 단어만 빈도 수 분석해보기 (0) | 2022.04.28 |
[Hadoop] : 맵리듀스 버전 별 차이 (0) | 2022.04.28 |
댓글