Hadoop 성능 측정

 Hadoop이 느리다는 글을 우리 와이프님이 보시고 기정 사실로 받아 들이려고 하는걸 아래 테스트로 무마하고자 한다.

그럼 근거를 제시해 보도록 하겠다.

전에 netflix 데이터를 돌려본다는 포스팅을 쓴적이 있다.

그곳에서 제공해준 10억건이 넘는 데이터가 아래와 같은 포멧으로 있다.

movieid(key), <rating, date, userid>,<rating, date, userid>, <rating, date, userid>, ……..


이것을 아래와 같은 유저 아이디를 키로 하는 데이터를 만드는 작업이다. (user based filtering을 위한 작업이다.)


usrid(key), <movieid, date,rating>,
<movieid, date,rating>,<movieid, date,rating>,……..



이것을 위해 Map, Reduce 함수를 C++로 제작했고 제일 처음 로컬 리눅스 머신에서 아래와 같은 명령으로 돌려 봤다.

cat ../alldata_mv_key | ./createByuseridMapper | sort -n -k 1 | ./createByuseridReducer > output

정확하게 45분이 걸렸다.

위 Map, Reduce 함수와 동일한 바이너리로 동일한  스팩의 hadoop 로컬 머신에서 돌렸더니 1시간이 걸렸다. (물론 streaming 방법으로)

그러니 어느 임계 노드 대수 이하에서는 로컬에서 돌리는 것보다 느릴 수 밖에 없다는게 여기서 나온다.

이걸 5대의 Hadoop 클러스터에 돌렸다.

걸리는 시간은 약 13분… 기다릴 만한 시간이다. ^^;

미친척하고 100대에 돌려 봤다.

결과는 아래와 같다.

08/03/13 03:38:48 INFO streaming.StreamJob:  map 0%  reduce 0%
08/03/13 03:38:59 INFO streaming.StreamJob:  map 80%  reduce 0%
08/03/13 03:39:00 INFO streaming.StreamJob:  map 92%  reduce 0%
08/03/13 03:39:04 INFO streaming.StreamJob:  map 95%  reduce 0%
08/03/13 03:39:05 INFO streaming.StreamJob:  map 100%  reduce 0%
08/03/13 03:39:14 INFO streaming.StreamJob:  map 100%  reduce 1%
08/03/13 03:39:15 INFO streaming.StreamJob:  map 100%  reduce 6%
08/03/13 03:39:16 INFO streaming.StreamJob:  map 100%  reduce 13%
08/03/13 03:39:17 INFO streaming.StreamJob:  map 100%  reduce 18%
08/03/13 03:39:18 INFO streaming.StreamJob:  map 100%  reduce 19%
08/03/13 03:39:19 INFO streaming.StreamJob:  map 100%  reduce 22%
08/03/13 03:39:20 INFO streaming.StreamJob:  map 100%  reduce 52%
08/03/13 03:39:21 INFO streaming.StreamJob:  map 100%  reduce 55%
08/03/13 03:39:22 INFO streaming.StreamJob:  map 100%  reduce 62%
08/03/13 03:39:23 INFO streaming.StreamJob:  map 100%  reduce 70%
08/03/13 03:39:24 INFO streaming.StreamJob:  map 100%  reduce 89%
08/03/13 03:39:25 INFO streaming.StreamJob:  map 100%  reduce 95%
08/03/13 03:39:26 INFO streaming.StreamJob:  map 100%  reduce 100%


38초….

너무 믿기지 않는 시간이라 데이터를 확인해 봤는데 맞는 데이터다.

streaming 방법이 Java API를 이용한 방법보다 좀 느리니 Java API를 이용해서 직접 코딩해서 한다면 수초 정도로도 줄일 수 있을거라 생각한다.

이로서 Hadoop의 속도 문제를 폄하하는 분들이 없길 바란다.

그 동안 클러스터로 쓸만한 서버들이 없어서 이런 테스트를 못해 봤는데 Yahoo!에 오니 이런 경험까지도 해본다.
앞으로 하루 넘게 걸리는 모든 배치잡들은 Hadoop으로 돌릴 생각이다.  심지어 크롤까지도…

정말 감동적이다… ㅜㅜ

ps. 요즘 네이버 공채다 뭐다 하는데 저런데 욕심 있는 분들은 야후나 구글에 지원하는게 차라리 낫지 않을까 합니다. 복지나 페이도 중요하지만 저런 환경에서 일할 수 있다는것도 무시 못하죠.. 욕심있는 개발자라면 말예요. ^^
제가 알기론 1000대 이상의 서버에다가 분산처리를 해볼 수 있는 곳은 야후나 구글 정도가 아니면 쉽게 해볼 수 없는 경험으로 알고 있습니다.
이상 야후 광고 였습니다. ㅋ

CC BY-NC 4.0 Hadoop 성능 측정 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.