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

+ Recent posts