mapreduce作业失败,exitcodeexception exitcode=255

siotufzp  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(499)

我正在尝试运行需要共享库(一个.so文件)的mapreduce作业。如果我从一个独立的java程序中使用共享库,我一点问题都没有(这个程序使用java.library.path来查找库),但是如果我尝试从mapreduce程序中使用相同的本机方法,那么我会得到下面粘贴的异常(对于mapreduce程序,我使用的是分布式缓存)。
我知道本机库实际上正在加载,并且本机代码(c++)是从mapreduce调用的,因为本机函数将某些内容打印到标准输出中,但是在本机函数返回后,我看到一个“信号被捕获,退出“消息,然后应用程序日志只提供下面的信息(我认为255在本例中是-1),但就是这样,我不知道还有什么地方可以查找信息来调试这个问题或找出为什么会有未捕获的信号。任何关于在何处查找调试/日志信息的指针都将不胜感激。
容器启动异常:exitcodeexception exitcode=255:exitcodeexception exitcode=255:位于org.apache.hadoop.util.shell.runcommand(shell)。java:538)在org.apache.hadoop.util.shell.run(shell。java:455)在org.apache.hadoop.util.shell$shellcommandexecutor.execute(shell。java:702)在org.apache.hadoop.yarn.server.nodemanager.defaultcontainerexecutor.launchcontainer(defaultcontainerexecutor)。java:195)在org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.containerlaunch.call(containerlaunch。java:300)在org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.containerlaunch.call(containerlaunch。java:81)在java.util.concurrent.futuretask.run(futuretask。java:262)位于java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor。java:1145)在java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor。java:615)在java.lang.thread.run(线程。java:745)
容器以非零退出代码255退出

hgc7kmma

hgc7kmma1#

我已经解决了我自己的问题,但我不知道该怎么解释。在c++中,我有一个方法将指针作为jlong返回给java(我将指针转换为jlong),当从独立应用程序调用库时,一切正常,但从yarn调用时,相同的代码失败。
我编写了一个定制的信号处理程序,这帮助我知道这是一个段错误,所以我在指针或内存方面做了一些错误。当试图从mapreduce(yarn)调用同一个库时,我遇到了上一个异常。我将指针的类型转换为long而不是jlong,这就是我返回java的原因。后来,当调用本机对象的句柄时,问题不再发生。我不知道这有什么帮助,但Yarn是如何操纵环境的。
致以最诚挚的问候。

ds97pgxw

ds97pgxw2#

显然,mr程序在运行shell程序时遇到了问题。请检查c++程序的正确性。

相关问题