빅데이터공부하기  44-3 번째글입니다.

시간이 너무나도 빨리 지나가네요 ㅠㅠ

벌써 금요일이라니!!!

뚜등.... ㅠㅠ

하루하루 알차게 보내시길 바랍니다.><

 

빅데이터 공부하기 44-번째의 주제는 TextInputFormat 소스입니다.

시작해볼께요 ^^

 

 

 

 

TextInputFormat소스

 

./src/mapred/org/apache/hadoop/mapreduce/lib/input/TextInputFormat.java

 

 

public class TextInputFormat cxtends FileInputFormat<LingWritable, Text>

{

@ Override

public RecordReader<LongWritable, Text>

createRecordReader(InputSplit split, TaskAttemptContext context)

{

return new LineRecordReader();

}

 

 

 

@ Override

protected boolean isSplitable(JobContext context, Path file)

{

CompressionCodec codec= new

CompressionCodecFactory(context.getConfiguration()).getCodec(file);

return codec == null;

}

}

 

 

빅데이터공부하기 입력포맷의 역활에 대해 알아볼께요 ^^

 

입력포맷은 크게 두 가지 역할을 담당합니다.

 

1. 입력파일(들)을 InputSplit들로 나누기

보통HDFS블록 사이즈로 파일을 나누지만 몇가지 다른 변수들이 존재

 

getSplits 메소드로 입력파일들을 몇개의 InputSplit으로 나눌지를 리턴한다.

 

만일 입력포맷이 어떤 파일을 잘게 나누는 방법을 제공하지 않는다면 isSplitable 호출시 false를 리턴한다.

 

 

2. 한 InputSplit내의 레코드들을 읽는 방법을 제공한다.

 

이는 입력포맷에서 제공해주는 RecordReader를 통해 이뤄지는데 createRecordReader메소드를 통해서 제공된다.

 

 

MapReduce 프레임웍은 Job 시작시 지정된 입력포맷을 통해 위의 두정보를 얻어갑니다.

 

 

 

 

빅데이터공부하기 44-2 입력포맷의 역할

빅데이터공부하기 44-1 입력포맷클래스..

명절 다들 잘 보내셨나요??^^

쉬는날은 빨리지나가죠...

오늘도 빅데이터 공부를 모두 파이팅하면서 시작합시다!!

 

이건 복싑이죠 ><

KeyValueTextInputFormat

 

- TextInputFormat과 흡사

 

- 텍스트라인에서 키와 밸류가 tab문자를 사이에 두고 나뉘었다고 가정.

키와 밸류는 모두 Text타입

 

- tab이외의 다른 문자를 delimiter로 사용시

Configuration의 "key.value.separator.in.input.line"프로퍼티를 해당

문자로 설정

 

 

 

 

 

 

SequenceFileInputFormat

 

- SequenceFile포맷의 파일을 읽어들일때 사용하는 포맷

SequenceFile : 하둡 고유의 바이내리 키/ 밸류기반 압축지원 파일포맷.

키와 밸류는 어떤 타입이건 가능

 

특히 여러 하둡잡들을 체인닝하여 작업을 할때 굉장히유용(퍼포먼스 측면)

 

- 퍼포먼스를 고려하면 반드시 사용해야할 입력포맷

 

 

기타 입력파일 지정방법

 

- MultipleInputs.addInputPath

간혹 입력파일들에 따라 다른 mapper를 지정하면 일이 단순해지는 경우가 존재

 

입력파일에 따라 다른 입력포맷과 mapper를 지정가능

 

 

빅데이터공부하기 44 입력포맷 클래스들

 

이번빅데이터하둡 공부도 우리 다같이 파이팅합시다 ^^

 

TextInputFormat

 

디폴트 입력포맷클래스는 textInputFormat

- FileInputFormat에서 계승됨

-텍스트파일 대상이며 .gz로 압축된 것도 처리

- 라인 하나 (\n,\r)가 하나의 입력레코드

- 키: 라인의 파일 오프셋. LongWritable 타입

- 밸류: 라인전체 스트링. Text타입

 

입력포맷클래스의 변경은 Job클래스의 setInputFormatClass로 지정

 

 

KeyValueTextInputformat

 

TextInputFormat과 흡사

 

텍스트라인에서 키와 밸류가 tab 문자를 사이에 두고 나뉘었다고 가정. 키와 밸류는 모두 Text 타입

 

tab이외의 다른 문자를 deliniter로 사용시

- Configuration의 "key.value.separator.in.input.line" 프로퍼티를 해당 문자로 설정

 

 

 

 

 

 

빅데이터 공부하기!!

오늘은 Mapper갯수의 결정방식에 대해서 알아볼게요^^

 

Mapper갯수의 결정방식

MapReduce라이브러리부터는 Mapper의 갯수를 MapReduce프레임웍이 결정

- setNumMapTasks메소드는 이제 no-op

 

 

고려대상은 입력파일의 수와 크기, 입력파일포맷, HDFS의 블록크기등의 다양한 변수들

- 가장 중요한 것은 입력파일포맷

 

- 입력파일들은 결국 Input Split이란 블록(가능하면 HDFS블록의 크기만큼)으로 나눠지며 각 Input Split마다 mapper가 하나씩 할당

 

- 즉 Input Split의 수 == mapper의 수

 

 

빅데이터공부하기43-2번째 글입니다.

이번글은 Mapper 입력과 출력에대해서 공부하겠습니다.

 

Mapper 입력지정

 

다음 두 메소드에 의해 결정

- Job 클래스의 setlnputFormatClass(입력포맷)

- FileInputFormat클래스의 addInputPath 혹은 addInputPaths(입력파일위치)

 

setInputFormatClass로 지정된 클래스가 addInputPath로 지정된 입력파일들을 어떻게 읽어들일지 결정한다.

 

addInputPath나 addInputPaths 모두 여러번 호출가능하며 디렉토리를 지정할 경우 디렉토리 아래 모든 파일들이 입력파일이 된다.

 

Mapper 출력타입

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

setMapOutputKeyClass

setMapOutputValueClass

 

 

 

 

 

 

빅데이터공부하기 추석전날까지도 우린 열심히

빅데이터를 공부합시다. 그리고 추석때 가족들과

즐거운 시간을 보내세요 ^^

 

이번글은 Identity Mapper에 대해서 배울거에요..

 

Identity Mapper

 

모든 mapper의 선조가 되는 Mapper 클래스가 바로 Identity Mapper

 

입력으로 들어온 키, 밸류를 그대로 출력으로 내보냄

 

protected void map(KEYIN key, VALUEIN value, Context context) throws IOExecption, InterruptedExecption {

context, write((KEYOUT)key, (VALUEOUT)value);

}

 

예) 이미 키가 존재하는 입력파일들을 같은 키를 갖는 레코드들끼리 모아서 처리해야할 경우 사용가능. 즉 reducer만 필요.

- job.setMapperClass(Mapper.class)

 

 

 

빅데이터공부하기 계속계속 달리는중~~~~

이번에 공부할 내용은 Mapper Internals입니다.

 

 

Mapper 클래스의 메소드들

 

앞서 본 map 메소드이외에도 다음 메소드들이 존재

public void setup(Mapper.Context context)

* map 메소드에서 필요리소스를 여기서 할당

 

public void cleanup(Mapper.Conntext context)

* setup에서 할당한 리소스를 해제

 

public void run(Mapper.Context context)

* 기본구현은 다음과 같다.

 

 

 

public void run(Context context)throws IOExeption, InterruptedException

{

setup(context);

while(context.netKeyValue())

{

map(context.getCurrentkey(), context getCurrentValue(), context);

}

cleanup(context);

}

 

 

 

 

빅데이터공부는 아직..끝나지않았다.. ㅋㅋㅋ

모두 파이팅하세용 ^^

 

+ Recent posts