网上有很多解释,但是都不适合我,单纯看表面的堆栈信息,很容易迷惑,应该深入查看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的配置,如下
默认HDFS的超级用户组名是supergroup,将你需要的执行用户加入到该组即可。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于