YARN调度报错Stack trace: ExitCodeException exitCode=1解决方式

网上有很多解释,但是都不适合我,单纯看表面的堆栈信息,很容易迷惑,应该深入查看ApplicationMaster和NodeManager的日志。碰到过很多异常会有不合理的展示,导致使用者被表面迷糊,很难快速定位问题。

问题的具体堆栈信息如下

Stack trace: ExitCodeException exitCode=1:
        at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
        at org.apache.hadoop.util.Shell.run(Shell.java:455)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
        at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

Container exited with a non-zero exit code 1
Failing this attempt. Failing the application.

这个报错有时候很迷惑,并非真正是表面堆栈信息展示的。我一开始的推理是集中在资源配置不合理上,调整了yarn-site.xml的yarn.nodemanager.resource.memory-mb参数和vcores参数,发现该问题还是无法解决。后来,我直接查看ResourceMananger的日志,发现压根就不是这个错误,看到的是java.io.FileNotFoundException: File does not exist: /user/root/.staging/PriviledgedActionException as:root (auth:PROXY) via mapred (auth:SIMPLE) cause ...(没有及时记录本文,日志找不到了)。花咋,这样的报错一般都是没有权限导致的。解决这个问题的方式非常简单,如下处理即可:

groupadd supergroup
usermod -a -G supergroup root
usermod -a -G supergroup mapred
usermod -a -G supergroup hdfs
usermod -a -G supergroup hive
usermod -a -G supergroup hue
usermod -a -G supergroup spark
sudo -u hdfs hadoop fs -chmod 770 /user

根据HDFS的配置,如下
YARN调度报错Stack trace: ExitCodeException exitCode=1解决方式_第1张图片
默认HDFS的超级用户组名是supergroup,将你需要的执行用户加入到该组即可。

你可能感兴趣的:(分布式)