티스토리 뷰

오늘은 Yarn 테스트 과정에서 알게 된 오류를 공유합니다. 


우선 제 로컬 개발 환경은 다음과 같습니다.


- Hadoop Version: Apache Hadoop 2.2.0

- JDK: 1.6

- OS: OSX 10.8.2

- ProtocolBuffer: 2.5.0


HDFS에 파일 읽기와 쓰기가 제대로 되고,

ResourceManager와 NodeManager도 데몬도 정상적으로 실행된 것을 확인했는데요.


이상하게 Yarn application만 실행하면 다음과 같은 오류가 발생했습니다.

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount conf output

ager at /0.0.0.0:8032

14/01/15 19:10:20 INFO mapreduce.Job: The url to track the job: http://blrunnerui-MacBook-Pro.local:8088/proxy/application_1389780598581_0001/

14/01/15 19:10:20 INFO mapreduce.Job: Running job: job_1389780598581_0001

14/01/15 19:10:26 INFO mapreduce.Job: Job job_1389780598581_0001 running in uber mode : false

14/01/15 19:10:26 INFO mapreduce.Job:  map 0% reduce 0%

14/01/15 19:10:26 INFO mapreduce.Job: Job job_1389780598581_0001 failed with state FAILED due to: Application application_1389780598581_0001 failed 2 times due to AM Container for appattempt_1389780598581_0001_000002 exited with  exitCode: 127 due to: Exception from container-launch: 

org.apache.hadoop.util.Shell$ExitCodeException: 

at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)

at org.apache.hadoop.util.Shell.run(Shell.java:379)

at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)

at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

at java.util.concurrent.FutureTask.run(FutureTask.java:138)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

at java.lang.Thread.run(Thread.java:680)



구글링을 아무리 해봐도, 같은 오류를 경험한 사람들만 있을 뿐 해결책은 나와 있는 게 없었는데요.

ResourceManager 관리화면에서 이력을 쫓아가다 보니, 이런 로그가 보였습니다.



그래서 Hadoop 소스를 찾아보니, 다음과 같이 클래스내에서 /bin/java를 호출하고 있었는데요.


    vargs.add(Environment.JAVA_HOME.$() + "/bin/java");


OSX에서는 저 코드가 제대로 동작하지 않아서, 정확히는 Environment.JAVA가 bash에 적용되어 있는 JAVA_HOME을 가져오지 못해서 $JAVA_HOME/bin에서 java를 찾는 것이 아니라, root의  /bin에서 java를 찾고 있는 것이였습니다.


Hadoop 소스를 수정하는 것도 방법이지만, 다음과 같이 간단하게 이 문제를 해결할 수 있었습니다.


 su - root

 cd /bin

 ln -s $JAVA_HOME/bin/java java


위와 같이 심볼릭 링크만 걸어주시고, yarn 데몬만 재구동해주시면 yarn용 application이 정상 동작하는 것을 확인하실 수 있습니다.


P.S Hadoop2 설치 과정은 구글링으로 쉽게 찾을 수 있어서, 따로 정리하지 않았습니다. ^^;;


저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼