본문 바로가기

IT for developer/Hadoop+Nosql

Hadoop 디버깅 하기.


하둡을 로컬 환경에서 개발하면서 디버깅 하기 위한 방법에 대해서 정리해 보려한다.


구글신의 도움으로 이런 저런 블로그를 둘러보고 테스트한 결과를 토대로 다음과 같은 방법이 가능하다.


싱글모드, 즉 Standalone 모드일때는 디버깅이 사실 쉽다. hadoop-env.sh 파일에 자바 디버깅 옵션을 넣어주고 리모트 디버깅을 수행하면된다. 사실 이런것도 필요없고 이클립스에서 설정만 잘하고 실행시키면 바로 디버깅하면 실행할수 있다. 별도의 플러그인도 필요없다. 그래서 만약에 로컬모드로 실행시키는 경우 리모트디버깅하지 않고 클래스패스만 잘 잡고 이클립스에서 바로 실행하는 것이 오히려 좋다고 본다.


두번째는 가상분산모드이다. 여러 포스트를 살펴보았지만 별다른게 없었다. 별도의 태스크트랙커가 실행되어서 맵리듀스를 동작시켜주기 때문에 리모트 디버그 모드 옵션을 맵리듀스를 실행하는 쉘에 넣어줘도 별다른 반응이 없다. 그래서 살짝 꼼수를 생각해 봤다. 태스크트랙커에서 맵리듀스를 실행시키기 위한 JVM 옵션 설정에 디버깅 옵션을 넣어주는 것이다. 다중에 태스크가 실행된다면 디버깅이 곤란할 수 있겠지만 아뭏튼 잘 동작한다. 만약에 꼭 HDFS에서 실행시켜야 되는 상황이라면 이렇게해서라도 테스트/디버깅 하면 좋을 듯하다.

<property>

  <name>mapred.child.java.opts</name>

  <value>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5002</value>

</property>