본문 바로가기

Study/Bigdata

맵리듀스 프로그래밍을 할때 log4j로 로그 찍어보기

http://www.jaso.co.kr/265


일딴 김형준님의 블로그 요걸 보시면 편하게 이해하실수 있습니다. 

일종의 사전지식이랄까.


일단 이글을 보시는 분들은 아마 저보다는 잘하시는 분들이실겁니다. 전 요즘 이것때문에 죽겠거든요

전,, 도저히 저걸 봐도, 하둡 돌아가는게 안보인느것입니다.


일단 제가 필요한 로그은 getsplit 하고 recodereader 이거 맞나요 직접 구현하는 부분이.

일단 메인클레스 내부에서는 sysout 찍어버리면 보이는데, 재내들은 그 안에 있으니 보이지도 않고

그래서 제가 선택한 방법은 log4j 입니다.


http://blog.naver.com/PostView.nhn?blogId=airguy76&logNo=150087115029&categoryNo=3&viewDate=&currentPage=1&listtype=0

산소소년님의 블로그


여기를 참고했습니다.


저는 이번에 log4j 를 처음사용했거든요, 물론 제 블로그의 특성상 제가 이해하고 있지 못한 관점에서 즉 나말고 다른분도 계실꺼라는걸 가정하고,


일단 저는 맵리듀스 프로그래밍을 공부할때 이클립스를 사용하거든요 log4j 설정 파일properties 이걸 어디에 넣냐 이것이 문제였습니다.


웹상에서 보면 src 에 넣어라 bin에 넣어라..


그런데 맵리듀스 프로그래밍을 하면 넣을 필요가 없다가 정답인것 같습니다 일단 제 관점에서는요.


$hadoop_HOME 하둡 폴더 안에 보시면 conf 폴더가 있고 그안에 properties 파일이 있는걸 보실수 있는데 맵리듀스 프로그래밍을 하기위해서 만드는 jar도 여기서 영향을 받네요.


그런데 하둡 특성상 여러 클러스터 안에서 돌아가니까. 로그가 그안에 생길꺼고 로그생성위치가. 아 적어놓는다는걸 이부분은 다음에 적어놓겠는데, 어디냐면 제 기억에, hdfs 폴더 지정하지 않나요 거기 보면 잡관련 로그들 남는부분 아마 뒤져보셨다면 syserr sysout 막 파일들 생기는곳 그 sysout 파일안에 생겼던걸로 기억합니다. 이건 다시한번 확인해봐야겠네요 


그래서 저는 산소소년님의 블로그 따라서 log4j에서 소켓으로 한곳으로 모을수가 있더근요 하둡 conf 안에 properties 설정에서


log4j.rootLogger=${hadoop.root.logger}, EventCounter,socket

log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Threshold=FATAL
log4j.appender.socket.RemoteHost=192.168.0.1
log4j.appender.socket.Port=8081
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} [%p] %t %c{2}: %m%n
설정하고

받는 소켓은 FATAL로 했습니다.(저는 맵리듀스가 어덯게 돌아가고싶은지 보고싶어서요.) 안그러면 잡스러운것이 다 날라노더군요 .

그리고 이걸 받는 서버에서는

log4j.rootLogger=FATAL, stdout

#delete filewrite


#stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} [%p] %t %c{2}: %m%n


이렇게해서 socket_log.properties 라는 설정파일 하나 만들고요 위치는 상관없습니다.
 java -classpath ./log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 8081 socket_log.properties

실행할때는 log4j로 실행하여서 서버를 열고 맵리듀를 돌리면, 소켓으로 로그들이 날라오시는걸 볼수 있습니다.


그런데 아직 제가 이해가 안가는건 getsplit부분은 왜 로그가 안날라오는지 이해가 안가네요 . 제가 하둡구조를 잘못이해하는걸수도 있는데,,, 

혹시 하둡사용하시는 분들중에서 어떻게 하면 맵리듀스로그를 쉽게 볼수 있는지 공유해주신다면 감사하겠습니다.