由于容器启动时的AM容器异常,无头环境中的MapReduce作业失败了N次

时间:2013-12-05 02:24:27

标签: java macos hadoop headless

在MacOSX中运行地图减少无头环境中的作业时(例如,当作为特定用户进行ssh时运行作业时),我得到以下异常或类似的内容......

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)

相反,如果我以该用户身份登录,则不会发生错误,并且MR作业将运行结束,而停靠栏中会弹出标记为“MRAppMaster”的Java图标。

我已将其缩小到ResourceManager,启动Java进程而不传递-Djava.awt.headless=true。在无头环境中发生这种情况时,JVM无权在根窗口中显示。这已经出现在其他一些情况下,我已经纠正了每一个。

这不是权限问题(在别处建议的内容)或缺少目录。

但我不知道如何影响最后一次未经许可访问根窗口的违规行为。

我已将-Djava.awt.headless=true选项添加到以下内容中:

  • hadoop-env.sh中的HADOOP_OPTS
  • mapred-env.sh中的HADOOP_JOB_HISTORYSERVER_OPTS YARN_OPTS in yarn-env.sh
  • yarn-env.sh中的YARN_RESOURCEMANAGER_OPTS(尽管如此 可能会复制YARN_OPTS
  • mapred {地图|降低}。.child.java.opts 和mapred.child.java.opts在mapred-site.xml

我错过了什么?我可能最好在全球范围内将它添加到我的Java选项中吗?

仅供参考,这仅仅是Mac OS X 10.8.5上的伪群集设置,运行从Apache 1.6.0_65-b14下载的Hadoop 2.2.0。我没有使用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参数来完成同样的事情。 Java选择了它,除了运行MRAppMaster时 !!!

希望这有助于其他人。

2 个答案:

答案 0 :(得分:5)

问题是由于YARN为您的操作系统中使用的JAVA可执行文件使用的路径不同而引起的。

检查java的硬编码路径是/ bin / java但是如果没有/ bin / java作为Java可执行文件,则YARN作业将失败。就像在OSX中一样,我在/ usr / bin / java运行Java 1.7,如下所示:

$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: *****

之后,作业成功运行。

答案 1 :(得分:0)

如果不允许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

Thnaks