11. Class name Data type
BooleanWritable Boolean
ByteWritable byte
DoubleWritable Double
FloatWritable Float
IntWritable Integer
LongWritable Long
Text UTF-8
17. WritableCompareable interface
void write(DataOutput out)
Serialization of data written
void readFields(DataInput in)
Deserialization of reading data
int compareTo(WritableComparable w)
Friday, September 27, 13
19. 파일을 MR에서 읽을 수 있도록 key/value로 변경해
주는 formatter
Key/value의 값을 파일로 저장할 수 있도록 도와주는
formatter
파일 이외에 여러 형태의 input/output format이
존재
InputFormat은 getSplit메소드로 여러가지를 함
Input/OutputFormat을 상속받아 구현 가능
Friday, September 27, 13
20. createRecordReader(InputSplit split,...)
인풋 스플릿을 읽을 수 있도록 처리
RecordReader를 mapper에 넘겨줌
InputFormat 특징
TextInputFormat
캐리지 리턴으로 값 분리
키: 라인 번호
값: 라인의 내용
SequenceFileInputFormat
바이너리 포멧
키, 값을 저장하는 구조
압축 지원
Friday, September 27, 13
21. OutputFormat을 상속
RecordWriter를 reducer에 넘겨줌
OutputFormat 특징
TextOutputFormat
키/값을 텍스트로 출력할 때, 사용
“Key, Valuen”의 형태로 출력
LazyOutputFormat
TextOutputFormat과 같은 출력
결과
파일의 내용이 없을 경우, 생성하지
않음
Friday, September 27, 13
24. Text를 Key/Value의 형태로 만듦
map(key, value, ...)함수를 호출
하나의 인풋에 대해서만 처리하는 것에 집중
꼭 하나의 인풋에 대해 하나의 아웃풋이 존재할 필
요는 없다(DelayCountMapper.java)
(k1, v1) ! (k2, v2)
Friday, September 27, 13
37. Map의 아웃풋이 많아지면...
Reducer에 넘겨주는 데이터는 적을 수록 좋다
Mapper에서 Reducer의 일을 일부 할 수 있지 않
을까?
(k2, list(v2)) ! (k2, v2’)
Friday, September 27, 13
38. Map의 아웃풋이 많아지면...
Reducer에 넘겨주는 데이터는 적을 수록 좋다
Mapper에서 Reducer의 일을 일부 할 수 있지 않
을까?
한줄이면 끝!
(k2, list(v2)) ! (k2, v2’)
Friday, September 27, 13
39. Map의 아웃풋이 많아지면...
Reducer에 넘겨주는 데이터는 적을 수록 좋다
Mapper에서 Reducer의 일을 일부 할 수 있지 않
을까?
한줄이면 끝!
job.setCombinerClass(Reducer.class)
(k2, list(v2)) ! (k2, v2’)
Friday, September 27, 13
51. 하지만 실제로 분석하는 과정을 보면?
데이터를 읽어서 특정 시간대로 자르고
Friday, September 27, 13
52. 하지만 실제로 분석하는 과정을 보면?
데이터를 읽어서 특정 시간대로 자르고
특정 유저나 혹은 유저들을 다시 필터링하고
Friday, September 27, 13
53. 하지만 실제로 분석하는 과정을 보면?
데이터를 읽어서 특정 시간대로 자르고
특정 유저나 혹은 유저들을 다시 필터링하고
각 유저들의 행동을 합하거나, 더하거나 한뒤
Friday, September 27, 13
54. 하지만 실제로 분석하는 과정을 보면?
데이터를 읽어서 특정 시간대로 자르고
특정 유저나 혹은 유저들을 다시 필터링하고
각 유저들의 행동을 합하거나, 더하거나 한뒤
유니크한 값들도 찾아보고
Friday, September 27, 13
55. 하지만 실제로 분석하는 과정을 보면?
데이터를 읽어서 특정 시간대로 자르고
특정 유저나 혹은 유저들을 다시 필터링하고
각 유저들의 행동을 합하거나, 더하거나 한뒤
유니크한 값들도 찾아보고
원하는 분석 작업들을 진행...
Friday, September 27, 13
56. 하지만 실제로 분석하는 과정을 보면?
데이터를 읽어서 특정 시간대로 자르고
특정 유저나 혹은 유저들을 다시 필터링하고
각 유저들의 행동을 합하거나, 더하거나 한뒤
유니크한 값들도 찾아보고
원하는 분석 작업들을 진행...
마지막으로 보고싶은 기준으로 소팅하여 출력
Friday, September 27, 13