이번 빅데이터공부하기 45에서는 MapReduce에서 사용되는

타입들에 대해서 보기로 했죠!

밸류타입과 키타입에 대해서 공부하겠습니다.

 

 

밸류 타입

 

MapReduce에서 밸류로 사용되는 타입은 반드시 Writable인터페이스를 지원

 

이는 하둡노드들간의 RPC시 파라미터나 리턴밸류 부분의 serialization과 deserialization을 위함

 

Writable에는 두 개의 메소드가 존재

- void write(DataOutput out)

- void readFields(DataInput in)

 

 

키 타입

 

MapReduce에서 키로 사용되는 타입은 WritableComparable인터페이스를 지원.

 

public interface WritableComparable<T> extends Writable, Comparable<T>

 

이는 하둡노드들간의 RPC시 밸류 부분의 serialization과 deserialization과 셔플링/소팅시 키 값의 비교를 위함

 

WritableComparable에는 Writable 이너페이스 이외에 Java의 Comparable 인터페이스를 지원

- void write(DataOutput out)

- void readFields(DataInput in)

- int compareTo(T o)

 

 

 

빅데이터공부하기 45-1 밸류타입과 키 타입

 

 

오 이제 빅데이터공부하기 45번째글이 왔네요 ..^^

이번글의 주제는 MapReduce에서 사용되는 타입들에 대해서 공부를 할거에요^^

 

 

전에 MapReduce에 대해서 공부한것이 기억나시나요?!!

안나시는 분들을 위해!!

 

 

전에 공부했던 내용이에요!!

앞으로 MapReduce에서 사용되는 타입에 대해서 공부할 것이기때문에

모르시는 분들은 아래를 클릭해서 참고하시면 될것 같아요 !

 

다음 글부터 본격적으로 시작할거구요..

오늘은 이글을 배우기 전 내용들을 복습하는 시간을 가져보려고 글을 올렸어요^^

항상 IT공부하자 티스토리로 공부하시는 분들~~

많은 것을 얻어가셨으면 합니다. ^^

 

빅데이터공부하기  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

 

 

 

 

 

 

+ Recent posts