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대 이상의 서버에다가 분산처리를 해볼 수 있는 곳은 야후나 구글 정도가 아니면 쉽게 해볼 수 없는 경험으로 알고 있습니다.
이상 야후 광고 였습니다. ㅋ

0 0 votes
Article Rating
Subscribe
Notify of
guest

14 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
typos

ㅋㅋ 그래서 야후가 좋다? N도 D도 내부에서 hadoop 쓰는가 보이더먼…

슈레인

내용 이해를 잘못 하신 게 아닌가 합니다. Hadoop이 느리다는 것은 “HDFS가 느리다.”로 받아들여야 하는 것 같습니다.

고감자

사실 그렇게 볼수도 있는데.

위 “느리다”는 글을 쓰신분이 너무 복합적으로 써놓으신거 같습니다.

그래서 읽는 사람에 따라서 그리고 경험에 따라서 다르게 보일수도 있겠네요.

김형준

국내 개발자에게 익숙한 몇가지 프로그램에 대해서 대규모 노드에서 테스트를 수행해보고 속도 등에 대해 공유 했으면 합니다. Yahoo에 계시니까…

typos

HDFS에 인덱스데이터를 넣는 NUTCH자체가 이미 정상적인 방법이 아니죠^^ 근데 nutch에도 로컬시스템 쓰는게 있는것 같은데 음… hdfs에 lucene 인덱스를 분산해서 넣는 그 자체의 허망함을(너무나 당연한) 인식해야지 그걸가지고 hdfs가 느리다고 폄하하는것은 좀 오버?
밥은 우리집에서 먹고 반찬은 옆집에서 그리고 국은 그 옆집에서 먹으면 당연히 밥먹는게 시간 오래걸릴수 밖에요…^^

아볼라

hadoop = hdfs + map/reduce이고 이것이 nutch는 아니죠. nutch는 hadoop을 이용해 lucene을 고쳐본 예제 정도로 이해하심이 맞는 듯 하네요.
아 그리고 nutch가 다른 구글등의 검색엔진과 대동소이 하다는 말에는 *죽어도* 동의 할 수 없습니다. ^^ 자전거와 자동차가 같다고 하심 할말 없지만요.

CharSyam

오호 좋은 내용이네요. 저도 그 글을 읽고, 그냥 그렇게 받아들이려고 했었는데, 좋은 내용입니다. 고운 하루되세요. 그런데, 실제 작업이 과연 100대의 구글에서 돌린다면 속도가 얼마나 나올까요? 흐음, 실제 비교가 되면 참 좋을텐데요.

sean

안녕하세요 초면입니다만 고감자님이라 부를게요
검색하다 여기까지 오게 되었네요…염치불구하고 감히 여쭈어도 될런지요..전 신입이고 이번에 프로젝트를 하게 됐는데 jsp, ajax,rmi,hibernate를 사용했구요.. 1억건 이상의 테이블(분산DB는 아니었음)에서 조회를 해서 화면에 그리드 형식으로 뿌리는 걸 했는데 속도가 너무나 느려서 (예를 들어 2달간 조회시 20여분이상이고 페이징은 되지만 그 다음페이지 넘어갈 때도 비슷한 시간…ㅠㅠ) 그래서 궁금한게 있습니다만 위에서 언급하신 hadoop이나 nutch(자세히는 아직 모릅니만..)와 hibernate/jsp/rmi가 병행될 수가 있는지요… 무례함을 용서하시구요 그럼 이만…

고감자

DB는 범용적이지만 데이터가 많고 쿼리의 복잡도에 비례해서 결과 뽑는 시간이 오래 걸립니다.
그래서 많은 최적화 방법들이 나온걸로 알고 있습니다.

그래서 제가 볼때는 현재 DB의 문제로 범위를 좁혀서 접근을 하셔야 할듯 합니다.
먼저 DB 최적화 작업을 먼저 해보시는게 순서가 아닐까요?

그리고 hadoop, nutch에 대해서 잘 모르시는거 같네요,^^;
hadoop을 어떤 용도로 쓰실지 제가 질문드리고 싶네요.
그리고 nutch는 검색 플랫폼입니다.

너무 질문의 범위가 넓어서 답변이 되었나 모르겠습니다.

sean

답변 감사합니다.. DB최적화면… 오라클 튜닝쪽을 봐야겠군요..(사실 먼저 감안한 부분인데 획기적으로 속도가 확 줄게될지는 잘 몰라서요…십억건 단위도 다룰텐데 위의 38초만 되더라도 획기적이죠..위 글 보다가 혹시 응용이 가능한가 싶어서요.. ㅎㅎ) 감사합니다…범위가 좁혀졌어요.. 아 그리고 hadoop, nutch는 잘 모르는게 아니라 하나도 몰라요~ ;;

김동현

안녕하세요 저는 컴퓨터 공학과에 다니는 학생입니다.
이제막 하둡을 공부를 시작하면서 궁금한게 있어서 질문드립니다.

지금 제가 스마트기기에서 하둡을 포팅해서 하둡을 사용할 수 있는지에 대해 호기심이 생겨서 통신방법은 wifi를 사용하여 간단한 워드카운트 예제를 통해 성능 테스트를 하고 있습니다. 그런데 데이터 노드수를 늘려도 시간이 빨라지거나 하지 않고 데이터셋 크기에만 영향을 받는것 처럼 나와서 지금 패닉상태 입니다. ㅎㅎ;;;;;;
혹시 제가 더 고민해봐야 할 부분이나 의견이 있으시면 답변 부탁드립니다.

gogamza

워드 카운트는 각 노드에서 연산하는 연산량이 많지 않은 작업이며, 네트워트를 통한 데이터 전송이 아마도 더 큰 시간이 소요될것입니다. 이런 이유때문에 노드를 추가함에 따라 성능이 선형적으로 증가하지 않습니다.
아주 기본적인 내용이니 관련 서적을 찾아보시면 더 많은 정보를 얻을 수 있을것입니다.

김동현

아~!!!! 연산량이 부족한거였군요.. 답변감사합니다~ ^^
역시 더공부해 봐야겠네요..

그렇다면 데이터 연산량이 많은 작업들이 있나요?
예시 몇개만 알려주신다면 공부하는데 도움이 될것 같습니다.
감사합니다.

gogamza

O(n^2) 복잡도를 가지는 피보나치 수열이 좋은 예가 되겠네요