最近遇到运行yarn pi的时候遇到如下问题。
很明显是container出错了,但是错误没有提示的很清楚。然后去看nodemanager日志也是如此。这时候笔者第一个想到要去看container的执行日志。container具体的日志目录位置是通过YARN的配置文件(如yarn-site.xml
)中的yarn.nodemanager.log-dirs
属性定义的,默认为$HADOOP_HOME/logs/userlogs。去对应的nodemanager的userlogs下发现没有任何日志,查看nodemanager日志发现如果任务失败了,默认会删除container日志。
笔者觉得可以改一下源码,让他先不删日志。
DefaultContainerExecutor.java
@Overridepublic void deleteAsUser(DeletionAsUserContext ctx)throws IOException, InterruptedException {Path subDir = ctx.getSubDir();List<Path> baseDirs = ctx.getBasedirs();if (baseDirs == null || baseDirs.size() == 0) {LOG.info("Deleting absolute path : " + subDir);//if (!lfs.delete(subDir, true)) {//Maybe retryLOG.warn("delete returned false for path: [" + subDir + "]");//}return;}for (Path baseDir : baseDirs) {Path del = subDir == null ? baseDir : new Path(baseDir, subDir);LOG.info("Deleting path : " + del);//try {//if (!lfs.delete(del, true)) {//LOG.warn("delete returned false for path: [" + del + "]");//}//} catch (FileNotFoundException e) {//continue;//}}}
调整完了,重新打包一下当前项目,替换一下share/hadoop/yarn/hadoop-yarn-server-nodemanager-3.1.1.jar,重新执行就可以看到container执行日志了。
发现是job.xml加载有问题。后续经过分析解决了问题。当然container也可能报了其他问题,根据日志可以自行分析解决。
喜欢就点赞、收藏一下~