Hadoop 세부 사항 및 로그

Hadoop Q&A에 "하둡에서 디버깅이나 로그 남기는 법?" 질문이 올라와서 좀 정리해봤습니다.

Hadoop에서 System.out.println() 또는  LOG.debug() 등이 어디로 저장/출력되는지는 Hadoop의 동작원리를 정확하게 이해하고 있어야만 알 수 있다.
다음 그림은 Hadoop의 동작 내용을 설명한 그림이다. 그림에서 파란색 바탕의 박스는 Node(Server)를 나타내고 초록색 박스는 JVM을 나타낸다.
Client Node에서 사용자는 수행할 Job 프로그램을 수행한다. 이때 Client Node는 JobTracker가 수행중인 Node이거나 TaskTracker가 수행중인 노드이거나, 아니면 Hadoop 클러스터에 참여하지 않는 다른 노드라도 상관없다. 심지어는 Windows라도 상관없다.
Client Node에서는 사용자가 만든 main() 메소드가 있는 일반 자바 클래스를 수행하는 것과 동일하다. 단 Hadoop 관련 클래스, 환경 변수 등이 classpath 에 설정되어야 하는데  bin/hadoop 명령을 이용하는 경우에는 이미 이런 환경 변수가 설정되었기 때문에 bin/hadoop 명령을 이용해서 수행시키는 것이 편리하다. 하지만 사용자가 만든 Job 클래스는 main() 메소드를 가지고 있기 때문에 java MyJob 형태로 수행시키는 것도 가능하다.

사용자 삽입 이미지

사용자가 만든 main() 메소드가 수행되면서 JobClient 클래스의 runJob()을 호출하게 되면 JobClient에서는 다음과 같은 작업을 수행한다.
 1. jobConf에 설정된 정보를 이용하여 job.xml을 구성한 다음 HDFS에 저장
 2. 사용자의  Job 클래스 또는 Job 클래스가 있는 jar 파일을 job.jar로 묶어 HDFS에 저장
 3. InputFormat의 getSplit() 메소드를 호출하여 반환되는 값을 이용하여 job.split 파일을 HDFS에 저장

따라서 main() 메소드와 InputFormat의 getSplit() 또는 validate() 등의 메소드에서 출력하는 메세지는 Client Node의 표준 출력 또는 Client Node에서 설정된 log4j 구성대로 출력된다.

JobClient에 의해 JobTracker의 submitJob()이 호출되면 HDFS의 job.xml, job.split 정보를 이용하여 map/reduce task를 생성한 후 job queue에 추가한다.

TaskTrasker는 주기적으로 JobTracker에 heartbeat() 메세지를 보내는데 이 heartbeat 메세지를 이용하여 JobTracker는 TaskTracker의 상태 정보를 파악한다. heartbeat() 호출의 return 값에 TaskTracker가 수행할 Task의 목록이 전달된다. 따라서 Hadoop는 JboTracker가 직접 TaskTracker에 Task를 할당하는 것이 아니라 queue에 넣어 두면 TaskTracker가 가져가는 방식이다.

TaskTracker는 Task를 받으면 HDFS로 부터 job.jar 파일을 읽어 로컬 디스크에 저장한 다음 Task를 fork한다. 그림에서 보면 UserTask라고 되어 이는 부분이 있는데 이것은 TaskTracker Node에서 수행되지만 TaskTracker와는 별도의 JVM으로 수행된다. 따라서 User Task에서의 println(), LOG.debug() 등은 TaskTracker와는 다른 경로로 출력된다.
UserTask의 경우 main() 메소드를 사용자가 정의해 주지는 않았다. 실제로는 TaskTracker내에 있는 Child 클래스가 main() 메소드를 가지고 있고 TaskTracker는 Client 클래스를 fork 시키면서 표준출력(stdout), 표준에러(stderr), log4j 출력 등을 특정 파일로 리다이렉션 시킨다.
Client 클래스의 main()에는 다음과 절차로 사용자의 Map, Reduce task를 수행시킨다.

1. 사용자가 정의한 InputFormat의 getReader() 메소드를 가져온다.
2. while() 문 내에서 Reader의 next() 메소드를 호출하면서 false를 반환할때 까지 반복한다.
3. next()에서 가져온 값을 이용하여 사용자가 정의한 map() 메소드를 호출한다.

마지막으로 hadoop의 로그 관련 내용을 정리하면 다음과 같다.
1. JobTracker, TaskTracker
JobTracker, TaskTracker가 수행하면서 발생하는 info, warn 등의 로그 정보는 각 노드의 $HADOOP_HOME/logs에 각 서버명별로 파일로 저장된다.
2. 사용자 Job의 main()
사용자 Job의 main() 메소드 내에 있는 System.out, LOG.info()는 job을 수행하는 ClientNode에 나타난다.
3. InputFormat의 getSplit()
job을 수행하는 ClientNode에 나타난다.
4.map(), reduce(), InputFormat.next(), close() 등에서의 출력은 각 Task가 수행되는 TaskTraker노드의 $HADOOP_HOME/logs/userlogs/{TASK_ID}/sdtout, sdterr, syslog 파일에 저장된다.
직접 TaskTracker의 노드에 접속해서 볼수도 있지만 브라우저에서도 확인할 수 있다.
http://jobtracker_hostname:50030에서 특정 job을 선택한 다음 계속 링크를 따라 가면 로그를 볼 수 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


플랫폼데이 후기

지난 금요일 플랫폼데이에 참여 했습니다. 자체 개발한 Neptune이라고 하는 Bigtable cloning에 대한 소개에 대한 발표를 했습니다.
발표 전에는 많은 사람들이 관심을 가져주리라 예상했는데 다소 실망스러운 반응이었습니다. Bigtable에 대한 이해가 아직 부족하지 않은가 하는 생각과 플랫폼이 관심을 얻기 위해서는 실제 적용된 사례가 있어야 한다는 것을 느꼈습니다.  Hadoop의 경우에도 야후가 사용하지 않았더라도 이렇게 인기를 얻었을까요?
이번 플랫폼데이에서 가장 인기 있었던 고감자님의 세션에서는 야후가 Hadoop을 어떻게 사용하고 있는지에 대해 어느 정도 파악을 할 수 있는 좋은 시간이었습니다. 한재선 대표님의 발표 중에서 Xen을 이용한 Hadoop 클러스터 가상화도 평소 관심을 가지고 있는 분야라 재미 있게 들었습니다. 야후의 Gateway 개념과 한대표님의 Xen 기반 가상화 개념을 합치면 가상화된 On Demand hadoop 클러스터를 구성할 수 있을 것 같습니다.
다만 Map&Reduce를 쉽게 만들어 준다는 도구는 기존 개발 방법론에서 모델링 도구와 자동화 도구와 비슷한데 실제로 효용성에 대해서는 의문점이 있습니다.
기존의 개발 방법론에서 사용하는 많은 모델링 도구과 자동화 도구도 대부분은 실패했기 때문이죠.

플랫폼은 제공자와 사용자가 있습니다. 이 모두는 서로 바라보는 관점과 요구사항이 모두 틀립니다. 플랫폼데이에서도 참석자 중 플랫폼 사용자가 더 많았습니다. 플랫폼 내부가 어떤 기술을 사용해서 어떻게 구성되어 있는지 보다는 플랫폼을 사용해서 어떤일을 할 수 있느냐에, 속도는 어느정도인가? 개발은 편리한가? 등에 더 많은 관심이 있는 것 같았습니다. 이런 요구에 부합되게 사용자적인 관점에서 접근하는 자료와 세미나 등이 많이 열려야 할 것 같습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


플랫폼데이 관련 공지입니다.

다음과 같은 내용으로 플랫폼데이를 실시합니다.

 본 컨퍼런스는 최근 주목을 받고 있는 분산 데이터 저장 및 처리 플랫폼에 대해 오픈소스 프로젝트인 Hadoop을 중심으로 전반적인 기술적인 이슈와 연구 동향, 적용 사례 등에 대해 심도깊게 다룹니다. 프로그램은 다음과 주제들로 구성되어 있습니다.

  • Hadoop 플랫폼에 대한 소개와 개발현황
  • Hadoop 플랫폼의 적용 사례와 응용 서비스
  • 국내 인터넷 포털들의 내부 플랫폼 기술
  • 분산 컴퓨팅 플랫폼에 대한 연구소개 (대학 및 연구소)
저도 이번 컨퍼런스에서 발표를 하게 됩니다. 발표 요약입니다.

Neptune은 Google의 Bigtable과 같이 Column Oriented Data Storage로 PetaByte 규모의 데이터를 n개의 노드에 분산 저장시킨 후 실시간 또는 배치 업무에 데이터 서비스를 제공하는 시스템이다. 이번 발표에서는 Neptune의 소개 및 Neptune을 이용한 간단한 사례에 대해 알아본다.

http://www.platformday.com
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


Hadoop을 이용하지 않는 Map&Reduce

TheServerSide.com 기사 중에 Hadoop을 이용하지 않고 이미 나와 있는 다양한 오픈소스 등을 활용하여 Map&Reduce를 수행할 수 있는 기사가 올라 왔습니다.

http://www.theserverside.com/tt/articles/article.tss?track=NL-461&ad=640371&l=MapReduceRedux&asrc=EM_NLN_3634959&uid=2715394

http://www.theserverside.com/tt/knowledgecenter-tc/knowledgecenter-tc.tss?l=MapReduce

사용자 삽입 이미지


노드간의 커뮤니테이션은 ESB(Enterprise Service Bus)를 이용고 몇가지 Helper 클래스를 이용하고 있습니다. 얼마나 유용한지는 해봐야 알겠죠...
참고하세요.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


PowerSet 첫번째 제품 릴리즈

Google Bigtable clone 프로젝트인 HBase의 메인 개발 회사인 Powerset에서 첫번째 제품을 릴리즈 했습니다.
Powerset은 자연어 처리 기법을 이용하여 위키피디아와 같이 잘 구성된 웹 컨텐츠를 분석하여 검색에 활용하고자 하는 회사합니다.
다른 검색 엔진에 비해서 무엇이 좋아 졌는지는 잘 모르겠네요.

www.powerset.com을 참고하세요.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


Apache Pig 잠깐 사용기

Hadoop summit에서 발표된 pig 관련 자료를 보고 잠깐 테스트 겸해서 돌려 보았습니다.
발표자료에 있는 script는 다음과 같습니다.

Visits= load ‘/data/visits’as (user, url, time);
Visits= foreach Visits generate user, Canonicalize(url), time;
Pages= load ‘/data/pages’as (url, pagerank);
VP= join Visits by url, Pages by url;
UserVisits = group VP by user;
UserPageranks = foreach UserVisits generate user, AVG(VP.pagerank) as avgpr;
GoodUsers = filter UserPageranks by avgpr > ‘0.5’;
store GoodUsers into '/data/good_users';

두번째 라인에 있는 Canonicalize()는 사용자 정의 eval func 이라서 이 부분은 뺴고 테스트 했습니다.
사용하면서 느낀 내용은 다음과 같습니다.

1. 문서 및 예제가 너무 부족하다.
   사이트나 오픈된 문서에 있는 문법들이 조금씩 틀리고 버그가 있고, 예제도 많지 않아 문법을 익히는데 상당한 어려움이 있었습니다. 특히 schema 지정하는 부분에서 cogroup과 join이 서로 틀려 무지 헤맸습니다.

2. syntax, semantic 오류에 대한 메세지가 부족하여 script 버그 찾기가 무지 어렵다.
  javacc 기반의 parser를 사용하고 있기 때문에 예상은 하고 있었지만 그래도 심하네요.

3. join 에서 map 갯수가 로딩되는 파일 수만큼만 생성된다.
  이거는 버그인지 제가 잘못해서인지는 모르겠지만 두개의 디렉토리를 로딩해서 join을 할 경우 한 디렉토리에 파일 하나가 1G이고 다른 디렉토리에 파일이 100MB이면 2개의 map만 생성되어 수행됩니다. 당근 무지 느리죠. 혹시나 하고 디렉토리에 파일을 여러개 넣어 보니까 파일 수만큼 map이 생성되네여...

4. dump
pig의 경우 로컬 모드에서도 돌아가게 되어 있습니다. 굳이 hadoop을 사용하지 않더라도 로컬레 저장된 파일을 분석하는 용도로 활용할 수 있습니다. hadoop 데몬 서버 띄울 필요도 없습니다. 이 경우 shell mode에서 dump 라는 명령어가 있는데 지정된 변수의 값을 콘솔에 출력해줍니다. 근데 이게 70개인가 넘어가니까 아무것도 나오지 않습니다. 제가 스크립트 잘못 만들줄 알고 한참 삽질했죠... store 명령을 이용해서 저장하면 잘 저장되고요...

5. store
dump의 경우 cogroup과 같이 bag 등의 결과도 한눈에 보기 좋게 구성해주는 반면에 store의 경우 하나의 row에 하나의 변수에는 값이 하나만 존재하도록 해야 합니다.

6. 종합
아직 제대로된 문서와 메일링 리스트가 활성화 되지 않다 보니 손에 익숙할 정도 사용하는데 까지 상당한 시행 착오가 필요할 것 같습니다. 그리고 map 갯수라든지 성능에 대한 부분을 반드시 확인한 다음에 사용해야 합니다.
아직 인큐베이팅 수준이라서 완성도 있는 내용이 나온 다음에 사용하는 것이 좋지 않나 생각합니다. 마지막으로 발표자료에 있는 script 그대로 돌리면 안돌아 갑니다. *^^*
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


HBase leader와 인터뷰한 기사

오랜만에 HBase 관련 소식 전합니다. HBase 개발자인 Jim Kellerman, Michael Stack, and Bryan Duxbury과 인터뷰한 내용입니다.

http://www.infoq.com/news/2008/04/hbase-interview

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


PlatformDay 컨퍼런스 소식

시간: 2008년 5월 30일 금요일 10:00 ~ 18:00 (예정)
장소: 서울대 엔지니어하우스 (310동) 대강당 (101호)
인원: 200명 (추후 선착순으로 등록)
대상: 플랫폼에 관심있는 누구나(대학, 기업, 연구소 등)
비용: 무료
주최: NexR Inc.

여기 http://nexr.tistory.com/entry/2 참고하세요.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


hadoop summit 자료 공개

hadoop summit 자료가 공개 되었습니다.

http://research.yahoo.com/node/2104

참고하세요.

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


google이 움직인다.

Google이 플랫폼 시장에서 움직이기 시작했습니다.

다음 기사 참고: http://www.news.com/8301-10784_3-9913631-7.html

App Engine라는 이름으로 서비스를 한다고 하는데 벌써 베타 테스터는 차버렸습니다.
(http://code.google.com/appengine/)

기사 내용대라면 500MB Disk, 10GB Data Transfer, 200 million daily cycles of processor use에 해당하는 컴퓨팅 리소스를 무료로 사용할 수 있게 한다고 합니다.

사용자 삽입 이미지

(App Engine 로고, Google)




Google App Engine gives you access to the same building blocks that Google uses for its own applications, making it easier to build an application that runs reliably, even under heavy load and with large amounts of data. The development environment includes the following features:

  • Dynamic webserving, with full support of common web technologies
  • Persistent storage (powered by Bigtable and GFS with queries, sorting, and transactions)
  • Automatic scaling and load balancing
  • Google APIs for authenticating users and sending email
  • Fully featured local development environment
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


« Previous : 1 : ... 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ... 13 : Next »