突然,我的YARN群集已停止工作,我提交的所有内容都以“退出代码1”失败。我想跟踪该问题,但是一旦应用程序失败,YARN就会删除日志文件。为了保留这些日志文件,我必须为YARN调整什么配置设置?
答案 0 :(得分:22)
您的容器似乎正在退出,退出代码为1。
您无法在UI上看到日志,因为默认情况下会禁用日志聚合。以下参数确定日志聚合: “ yarn.log-aggregation-enable ”(如果禁用日志聚合,则设置为“ false ”。)
如果将其设置为“false”,则所有节点管理器都将容器日志存储在本地目录中,该目录由以下配置参数确定: “的 yarn.nodemanager.log-显示目录强>”。
例如在我的情况下,这设置为:
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>e:\hdpdata\hadoop\logs</value>
</property>
因此,特定应用程序的所有容器日志都将在节点管理器计算机的“e:\ hdpdata \ hadoop \ logs \ {application-id} \ {container-id}”文件夹中找到,其中应用程序大师运行。
我们假设我的应用程序:“application_1443377528298_0010”FAILED。在YARNRM的UI中(由配置参数: yarn.resourcemanager.webapp.address 确定),您可以获取有关运行应用程序管理器的节点的信息。在下图中,应用程序管理器在计算机“120243”上运行。
如果您登录此计算机并在“e:\ hdpdata \ hadoop \ logs \ application_1443377528298_0010 \”文件夹中搜索,则可以看到应用程序“application_1443377528298_0010”的所有容器的日志。
但是,现在如果要通过YARN RM Web UI查看日志,则需要启用日志聚合。为此,您需要在yarn-site.xml中设置以下参数:
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/app-logs</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
<value>logs</value>
</property>
通过上述设置,我的日志在HDFS中以“/ app-logs / {username} / logs /”聚合。在此文件夹下,您可以找到目前为止运行的所有应用程序的日志。同样,日志保留由配置参数“ yarn.log-aggregation.retain-seconds ”确定(保留聚合日志的时间长度)。
当MapReduce应用程序运行时,您可以从YARN的Web UI访问日志。应用程序完成后,将通过“作业历史记录服务器”提供日志。
在您的情况下,如果要在Web UI上查看日志,则在应用程序终止后,您还需要开始运行MapReduce作业历史记录服务器。要启用它,请在mapred-site.xml中设置以下配置参数:
<property>
<name>mapreduce.jobhistory.address</name>
<value>{job-history-hostname}:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>{job-history-hostname}:19888</value>
</property>
并在yarn-site.xml中设置以下配置参数:
<property>
<name>yarn.log.server.url</name>
<value>http://{job-history-hostname}:19888/jobhistory/logs</value>
</property>
我已经在Windows上复制了HDP安装的设置,这些设置对我有用。这些也适合你。 有关上述每种配置的说明,请参阅以下链接:
https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml