由于来自容器启动的AM容器exception,无头环境中的MapReduce作业失败了N次
在MacOSX中运行地图减少无头环境中的作业时(例如,当作为特定用户ssh时运行作业时),我得到以下exception或类似的东西……
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图标会在Dock中弹出。
我已经将其缩小到ResourceManager,启动Java进程而不传递-Djava.awt.headless=true
。 在无头环境中发生这种情况时,JVM无权在根窗口中显示。 这已经出现在其他一些情况下,我已经纠正了每一个。
这不是权限问题(在别处建议的东西)或缺少目录。
但是我不知道如何影响最后一次未经许可访问根窗口的违规行为。
我已将-Djava.awt.headless=true
选项添加到以下内容:
- hadoop-env.sh中的HADOOP_OPTS
- 在yarn-env.sh中的HADOOP_JOB_HISTORYSERVER_OPTS在yarn-env.sh中的YARN_OPTS
- yarn-env.sh中的YARN_RESOURCEMANAGER_OPTS(虽然这可能与YARN_OPTS重复)
- mapred。{map | reduce} .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”条目。
他们在这里……
mapred.child.java.opts -Djava.awt.headless=true yarn.app.mapreduce.am.command-opts -Djava.awt.headless=true -Xmx1024m yarn.app.mapreduce.am.admin-command-opts -Djava.awt.headless=true
我还试图通过在/ etc / profile中添加_JAVA_OPTIONS参数来完成同样的事情。 除非运行MRAppMaster , 否则 Java 会把它拿起来!
希望这有助于其他人。
问题是由于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: *****
之后,工作成功运行。
如果不允许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的一个新function,您不想禁用它,您必须编辑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
- 我正在编写一个Accumulo迭代器来返回一个表的百分位数的随机样本
- 无法validationserde:org.openx.data.jsonserde.jsonserde
- 如何通过API访问Hadoop计数器值?
- 如何在mapper(Hadoop)中使用MATLAB代码?
- 如何使用Java有效地读取Hadoop(HDFS)文件中的第一行?
- 来自hbase / filesystem的hadoop namenode连接中EOFexception的含义是什么?
- Spring + Maven + Hadoop
- 压缩hadoop mapreduce输出的最简单有效的方法
- 在HBase MapReduce任务中加载本机共享库