복붙노트

[HADOOP] 헤드리스 환경의 MapReduce 작업이 컨테이너 실행의 AM 컨테이너 예외로 인해 N 번 실패합니다.

HADOOP

헤드리스 환경의 MapReduce 작업이 컨테이너 실행의 AM 컨테이너 예외로 인해 N 번 실패합니다.

Mac OS X (예 : 특정 사용자로 ssh'd 할 때 작업을 실행할 때)의 헤드리스 환경에서지도 축소 작업을 실행하면 다음과 같은 예외가 생깁니다.

2013-12-04 15:08:28,513 WARN org.apache.hadoop.yarn.server.resourcemanager.RMAuditLogger: USER=hadoop   OPERATION=Application Finished - Failed TARGET=RMAppManager     RESULT=FAILURE  DESCRIPTION=App failed with state: FAILED       PERMISSIONS=Application application_1386194876944_0001 failed 2 times due to AM Container for appattempt_1386194876944_0001_000002 exited with  exitCode: 1 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)

대신 해당 사용자로 로그인하면 "MRAppMaster"라는 Java 아이콘이 도킹되어있는 동안 오류가 발생하지 않고 MR 작업이 끝납니다.

나는 이것을 -Djava.awt.headless = true를 따르지 않고 자바 프로세스를 시작하는 ResourceManager로 좁혔다. 헤드리스 환경에서이 문제가 발생하면 JVM에 루트 창에 표시 할 수있는 권한이 없습니다. 이것은 다른 많은 상황에서 나타났습니다. 그리고 나는 각각을 교정했습니다.

이는 권한 (다른 곳에서 제안 된 것)이나 누락 된 디렉토리의 문제가 아닙니다.

하지만 허락없이 루트 창에 액세스하려는 마지막 시도에 영향을주는 방법은별로 없습니다.

다음에 -Djava.awt.headless = true 옵션을 추가했습니다.

내가 뭘 놓치고 있니? 이 옵션을 내 Java 옵션에 전역으로 추가하는 것이 더 낫지 않을까요?

참고로, 이것은 Java 1.6.0_65-b14로 Apache에서 다운로드 한 Hadoop 2.2.0을 실행하는 Mac OS X 10.8.5의 가상 클러스터 설정에 불과합니다. 나는 Homebrew 또는 다른 배포판을 사용하지 않았습니다. WordCount 예제를 사용하여 가상 클러스터를 테스트하고 있습니다.

감사.

승인. Mea culpa. 마침내 추가 할 모든 설정을 찾았습니다 ... mapred-default.xml 구성 지침에서 "opt"항목을 모두 검색하십시오.

여기 그들은 현장에서 ...

<property>
    <name>mapred.child.java.opts</name>
    <value>-Djava.awt.headless=true</value>
</property>
<!-- add headless to default -Xmx1024m -->
<property>
    <name>yarn.app.mapreduce.am.command-opts</name>
    <value>-Djava.awt.headless=true -Xmx1024m</value>
</property>
<property>
    <name>yarn.app.mapreduce.am.admin-command-opts</name>
    <value>-Djava.awt.headless=true</value>
</property>

/ etc / profile의 _JAVA_OPTIONS에 매개 변수를 추가하여 동일한 작업을 수행하려고했습니다. 자바는 MRAppMaster를 실행할 때를 제외하고 그것을 집어 들었다!

바라기를 이것은 다른 누군가를 돕기를 바랍니다.

해결법

  1. ==============================

    1.YARN이 JAVA 실행 파일과 다른 경로를 사용하고 OS에 다른 경로가 있기 때문에 문제가 발생합니다.

    YARN이 JAVA 실행 파일과 다른 경로를 사용하고 OS에 다른 경로가 있기 때문에 문제가 발생합니다.

    java를 확인하는 하드 코드 된 경로는 / bin / java이지만 Java 실행 파일로 / bin / java가 없으면 YARN 작업이 실패합니다. OSX 에서처럼 Java 1.7은 / usr / bin / java에서 다음과 같이 실행됩니다.

    $java -version  
     java  version "1.7.0_45" 
     Java(TM) SE Runtime Environment (build 1.7.0_45-b18) 
     Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
    

    OSX에서이 문제를 해결하기 위해 아래와 같이 / bin / java에서 / usr / bin / java로 링크를 만들었습니다.

    $ sudo ln -s /usr/bin/java /bin/java                                                                        
      Password: *****
    

    그 후 작업이 성공적으로 실행되었습니다.

  2. ==============================

    2.sudo ln -s / usr / bin / java / bin / java 조치가 허용되지 않은 경우

    sudo ln -s / usr / bin / java / bin / java 조치가 허용되지 않은 경우

    System Integrity Protection (SIP,1 sometimes referred to as rootless2[3]) is a security feature of OS X El Capitan, the operating system by Apple Inc.
    

    그것은 OS X 10.11의 새로운 기능이며 그것을 사용하지 않으려면 hadoop-env.sh 및 yarn-env.sh를 편집하고 JAVA_HOME 및 JAVA를 정확한 경로로 설정해야합니다.

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
    
    JAVA=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java
    

    고마워.

  3. from https://stackoverflow.com/questions/20390217/mapreduce-job-in-headless-environment-fails-n-times-due-to-am-container-exceptio by cc-by-sa and MIT license