실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

SequenceFileInputFormat

 

 

SequenceFile 포맷의 파일을 읽어들일때 사용하는 포맷
SequenceFile: 하둡 고유의 바이내리 키/밸류기반 압축 지원 파일포맷.  키와 밸류는 어떤 타입이건 가능.
특히 여러 하둡잡들을 체인닝하여 작업을 할때 굉장히 유용 (퍼포먼스 측면).
퍼포먼스를 고려하면 반드시 사용해야할 입력포맷

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

KeyValueTextInputFormat

 

 

TextInputFormat과 흡사
텍스트라인에서 키와 밸류가 tab문자를 사이에 두고 나뉘었다고 가정. 키와 밸류는 모두 Text 타입.
tab이외의 다른 문자를 delimiter로 사용시
Configuration의 “key.value.separator.in.input.line” 프로퍼티를 해당 문자로 설정

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

입력포맷 클래스들

 

 

TextInputFormat
디폴트 입력포맷클래스는 TextInputFormat
FileInputFormat에서 계승됨.
텍스트파일 대상이며 .gz로 압축된 것도 처리.
라인 하나 (\n, \r)가 하나의 입력레코드
키: 라인의 파일 오프셋.  LongWritable 타입
밸류: 라인 전체 스트링.  Text 타입
입력포맷클래스의 변경은 Job클래스의 setInputFormatClass로 지정

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

Mapper갯수의 결정방식

 

 

새 MapReduce 라이브러리부터는 Mapper의 갯수를 MapReduce 프레임웍이 결정
setNumMapTasks 메소드는 이제 no-op.
고려대상은 입력파일의 수와 크기, 입력파일포맷, HDFS의 블록크기 등의 다양한 변수들.
가장 중요한 것은 입력파일포맷.
입력파일들은 결국 Input Split이란 블록 (가능하면 HDFS블록의 크기만큼)으로 나눠지며 각 Input Split마다 mapper가 하나씩  할당.
즉 Input Split의 수 == mapper의 수

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

Mapper 출력타입

 

 

만일 mapper의 출력타입이 reducer의 출력타입과 다른 경우에는 Job 클래스의 다음 두 메소드 호출필요
setMapOutputKeyClass
setMapOutputValueClass

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

Mapper 입력지정

 

 

 
다음 두 메소드에 의해 결정
Job클래스의 setInputFormatClass (입력포맷)
FileInputFormat클래스의 addInputPath 혹은 addInputPaths (입력파일위치)
setInputFormatClass로 지정된 클래스가 addInputPath로 지정된 입력파일들을 어떻게 읽어들일지 결정한다.
addInputPath나 addInputPaths 모두 여러번 호출가능하며 디렉토리를 지정할 경우 디렉토리 아래 모든 파일들이 입력파일이 된다.

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

Identity Mapper

 

 

 
모든 mapper의 선조가 되는 Mapper 클래스가 바로 Identity Mapper.
입력으로 들어온 키,밸류를 그대로 출력으로 내보냄
protected void map(KEYIN key, VALUEIN value, Context context) throws IOException, InterruptedException {
    context.write((KEYOUT) key, (VALUEOUT) value);
 }
예) 이미 키가 존재하는 입력파일들을 같은 키를 갖는 레코드들끼리 모아서 처리해야할 경우 사용가능. 즉 reducer만 필요.
job.setMapperClass(Mapper.class);

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

 

MapReduce 프레임웍 상세설명 (WordCount 기반)

 

 

 
 
Mapper Internals

Mapper 클래스의 메소드들

앞서 본 map 메소드이외에도 다음 메소드들이 존재
public void setup(Mapper.Context context)
map 메소드에서 필요리소스를 여기서 할당
public void cleanup(Mapper.Context context)
setup에서 할당한 리소스를 해제.
public void run(Mapper.Context context)
기본구현은 다음과 같다.

  public void run(Context context) throws IOException, InterruptedException {
    setup(context);
    while (context.nextKeyValue()) {
      map(context.getCurrentKey(), context.getCurrentValue(), context);
    }
    cleanup(context);
  }

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

+ Recent posts