반응형
RecordReader 객체가 생성될 때 Map을 나눈다.
RecordReader를 더 엄밀히 말 하면 LineRecordReader로 라인별로 Key와 Value를 나누고 Mapper를 호출한다.
아래 세 가지가 가장 많이 사용되는 InputFormat이다.
- FileInputFormat
- KeyValueTextInputFormat
- SequenceFileInputFormat
시퀸스 파일이란?
- 효율적인 맵리듀스 수행을 위해 생성된 파일 형태
- 맵리듀스는 64mb 단위로 블록을 나눠서 하둡분산파일시스템에 저장한다.
- 저장되는 파일의 블록단위가 64mb보다 작은 경우 하둡분산파일시스템에 낭비되는 데이터 공간 및 맵리듀스 실행시 성능 저하가 발생한다.
- 파일 구조는 key,value 형태로 구현된다.
- 맵 형태
- 시퀀스 파일에서 제공하는 파일 타입은 크게 3가지이다.
- 압축되지 않은 파일 타입
- 레코드 단위 압축된 파일 타입
- 블럭단위 압축된 파일 타입
- 맵리듀스 분석 및 처리 전, 미리 배치를 통해 시퀀스 파일을 생성하는 것이 데이터저장 및 처리에 있어 매우 효율적이다.
- 시퀸스 파일을 사용하기 위한 파일 포멧
- SequenceFileInputFormat(읽기)
- SequenceFileOutputFormat(쓰기)
드라이버 파일만 작성한다. 매퍼, 리듀서를 생성하지 않는다.
기본 Map 함수를 활요앻 기존 파일의 변환 처리만 수행한다.
package hadoop.MapReduce.seq;
import lombok.extern.log4j.Log4j;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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.mapreduce.lib.output.SequenceFileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
* 맵리듀스를 샐힝하기 위한 Main 함수가 존재하는 자바 파일
* 드라이버 파일로 부름
*/
@Log4j
public class CreateSequenceFile extends Configuration implements Tool {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
log.info("변환할 원본 파일(폴더)과 시퀀스파일로 변환될 파일(폴더)를 입력해야 합니다.");
System.exit(-1);
}
int exitCode = ToolRunner.run(new CreateSequenceFile(), args);
System.exit(exitCode);
}
@Override
public void setConf(Configuration conf) {
// App 이름 정의
conf.set("AppName", "SequenceFile Create 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(CreateSequenceFile.class);
// 맵리듀스 잡 이름 설정, 리소스 매니저 등 맵리듀스 실행 결과 및 로그 확인할 때 편리
job.setJobName(appName);
// 분석할 폴더(파일) -- 첫 번째 파라미터
FileInputFormat.setInputPaths(job, new Path(args[0]));
// 분석 결과가 저장되는 폴더(파일) -- 두 번째 파라미터
FileOutputFormat.setOutputPath(job, new Path(args[1]));
// 맵리듀스의 맵 역할을 수행하는 Mapper 자바 파일 설정
job.setOutputFormatClass(SequenceFileOutputFormat.class);
// 리듀서 객체를 생성하지 못 하도록 객체의 수를 0 으로 정의
job.setNumReduceTasks(0);
// 맵리듀스 실행
boolean success = job.waitForCompletion(true);
return (success ? 0 : 1);
}
}
- CreateSequenceFile.java
Map 함수로 스퀀스 파일이 생성되기 때문에 part-m으로 생성된다.
시퀀스 파일을 맵리듀스의 RecordReader가 읽을 수 있는 형태로 변환하기 때문에 Key 값에 바이트 단위 값이 들어간다. → 개발자가 파일 내용을 보기에 불편하다.
반응형
'Data Base > Hadoop' 카테고리의 다른 글
[Hadoop] : 시퀀스 파일 압축 (0) | 2022.05.19 |
---|---|
[Hadoop] : 시퀀스 파일별로 단어별 빈도수 세기 (0) | 2022.05.19 |
[Hadoop] : Map 프로그래밍 (0) | 2022.05.17 |
[Hadoop] : Combiner, 컴바이너 (0) | 2022.05.10 |
[Hadoop] : URL 전송 결과가 성공인 요청 분석하기 (0) | 2022.05.03 |
댓글