container执行异常
用户提交app的app之后,如果container 被提交到特定到nm 执行,则一定会异常(could not find or load main class org.apache.hadoop.mapred.YarnChild),进而导致app执行失败
Last updated
Was this helpful?
用户提交app的app之后,如果container 被提交到特定到nm 执行,则一定会异常(could not find or load main class org.apache.hadoop.mapred.YarnChild),进而导致app执行失败
Last updated
Was this helpful?
用户磁盘挂了,恢复磁盘之后,重启系统,重启该节点所安装的服务正常。用户提交app,如果有container 被分配到恢复到节点,则会出现异常,异常信息如下:
有异常日志,说明container 执行命令已经执行(nodeManager已经接收到请求,并准备好数据)
确认 org.apache.hadoop.mapred.YarnChild 在 hadoop-mapreduce-client-app*.jar
打印container 执行命令或classpath 确认是否有对应jar
日志聚合是指一个app执行完之后,会将本地执行日志copy到hdfs ,并在HDFS 保存一段时间,同时清理container 在本地的执行资源(保存执行脚本,依赖jar ,配置文件,执行日志) 1. 修改配置关闭日志聚合 默认配置路径 hadoop/conf/yarn-site.xml
重启NM
container 执行资源默认位置在
/data/hadoop/yarn/local/usercache/【USER】/appcache/application_ID/container_ID/
其中包括 执行脚本和jar 依赖 ,执行入口是 default_container_executor.sh
container 日志目录
/data/hadoop/yarn/log/application_ID/container_ID 有对应 out 和 err 日志
有一部分执行资源会被缓存到本地用来复用
比如 /data/hadoop/yarn/local/usercache/【USER】/filecache/【id】
和 /data/hadoop/yarn/local/filecache/【id】/
从 CLASSPATH 结果路径中查询是否有hadoop-mapreduce-client-app*.jar 结果是没有发现对应文件
也就是这里是一个不断软连的目录,没有真实的资源
通过上面的定位,我们已经确认了问题原因是本地缓存的可复用的资源为空。 先说解决方案:删除本地缓存 /data/hadoop/yarn/local/filecache 目录,重跑app 问题解决。 要深入理解就涉及Hadoop 分布式缓存概念。 即 /data/hadoop/yarn/local/filecache/【ID】/ 路径的数据从哪里来,什么时候触发。
获取CLASSPATH 修改执行脚本launch_container.sh 打印 CLASSPATH
如果 CLASSPATH 确认没有对应 jar ,那应该存放哪里呢? 我们确认一下container 执行目录资源
从子目录详情看 最有可能在 mr-framework 目录(软连目录) 查看正常情况下的目录情况
而实际情况,我们看到的是