test.txt 에 아래와 같은 데이터가 있다면
1,2,1,2 B,A,B,A 3,3,2,3 A,B,B,B |
$ hadoop fs -put test.txt /user/test.txt
를 통해 hdpf 에 저장되어 있다 가정하자
이때 아래와 같이 2개의 datanode 로 데이터가 분산되어 있다면
datanode 1의 데이터는
1,2,1,2 B,A,B,A |
datanode 2의 데이터는
3,3,2,3 A,B,B,B |
이렇게 분산되어 있다라고 가정하자.
이 데이터의 최빈도(가장 많은 단어 mode)를 획득하려고 한다. 그래서 아래와 같이 구현했다고 가정하자
mapper 에서는 각 데이터를 분할하고
reduce 에서는 각 데이터의 최종합을 구하도록 mapreduce
mapper 의 input 은 해당 데이터의 line 별로 입력된다.
보통 입력된 데이터를 필요한 포맷으로 split 하여 사용한다. 여기서는 , 로 split 한다.
즉 datanode 1 의 mapper 에서는
1) 1,2,1,2
2) B,A,B,A
이러한 데이터로 두번 mapper 의 map 메소드가 호출되고
즉 datanode 2 역시
1) 3,3,2,3
2) A,B,B,B
이러한 데이터로 두번 mapper 의 map 메소드가 호출된다.
이동작을 표로 구분하면 다음과 같다.
1. combiner 가 없는 경우
동작 | 데이터노드1 | 데이터노드 2 |
HDFS 데이터 | 1,2,1,2 B,A,B,A | 3,3,2,3 A,B,B,B |
Mapper 의 map 메소드 입력 | 1,2,1,2 | 3,3,2,3 |
B,A,B,A | A,B,B,B | |
Mapper 의 map 메소드 출력 | (1, NullWritable) | (3, NullWritable) |
(2, NullWritable) | (3, NullWritable) | |
(1, NullWritable) | (2, NullWritable) | |
(2, NullWritable) | (3, NullWritable) | |
(B, NullWritable) | (A, NullWritable) | |
(A, NullWritable) | (B, NullWritable) | |
(B, NullWritable) | (B, NullWritable) | |
(A, NullWritable) | (B, NullWritable) | |
Shuffle(key 로 sorting) | ||
Reducer 의 reduce 메소드의 입력 * NullWritable => N 으로 기술 | (1, [N,N]) | |
(2, [N,N,N]) | ||
(3, [N,N,N]) | ||
(A, [N,N,N]) | ||
(B, [N,N,N,N,N]) | ||
Reducer 의 reduce 메소드의 출력(최빈도) | (B, 5) |
2. combiner 를 구현한 경우
combiner 에서는 value 를 각 단어의 개수를 저장함
동작 | 데이터노드1 | 데이터노드 2 |
HDFS 데이터 | 1,2,1,2 B,A,B,A | 3,3,2,3 A,B,B,B |
Mapper 의 map 메소드 입력 | 1,2,1,2 | 3,3,2,3 |
B,A,B,A | A,B,B,B | |
Mapper 의 map 메소드 출력 | (1, NullWritable) | (3, NullWritable) |
(2, NullWritable) | (3, NullWritable) | |
(1, NullWritable) | (2, NullWritable) | |
(2, NullWritable) | (3, NullWritable) | |
(B, NullWritable) | (A, NullWritable) | |
(A, NullWritable) | (B, NullWritable) | |
(B, NullWritable) | (B, NullWritable) | |
(A, NullWritable) | (B, NullWritable) | |
Combiner 의 reduce 메소드의 입력 * NullWritable => N 으로 기술
| (1, [N,N]) | (2, [N]) |
(2, [N,N]) | (3, [N,N,N]) | |
(A, [N,N]) | (A, [N]) | |
(B, [N,N]) | (B, [N,N,N]) | |
Combiner 의 reduce 메소드의 출력
| (1, 2) | (2, 1) |
(2, 2) | (3, 3) | |
(A, 2) | (A, 1) | |
(B, 2) | (B, 3) | |
Shuffle(key 로 sorting) | ||
Reducer 의 reduce 메소드의 입력 | (1, [2]) | |
(2, [2, 1]) | ||
(3, [3]) | ||
(4, [1]) | ||
(A, [2, 1]) | ||
(B, [2, 3]) | ||
Reducer 의 reduce 메소드의 출력 (최빈도) | (B, 5) |
'IT > 빅데이터(bigData)' 카테고리의 다른 글
Hive 의 Serde 2 (0) | 2014.11.25 |
---|---|
Hive 의 Serde 1 (0) | 2014.11.25 |
Mapper 클래스 구성 및 사용 (0) | 2014.11.22 |
여러 기능의 맵리듀스를 하나의 jar 로 묶을때 (0) | 2014.11.22 |
Hadoop 의 Counter 이야기 (0) | 2014.11.22 |