在hadoop中使用imagej并获取awt headless异常

y53ybaqx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(368)

我一直在尝试使用imagej1.45/imageja的particleanalyzer构建一个图像处理应用程序。该算法已经在我的mac上进行了完美的测试,但是当我把runnable jar放到hadoop集群上时,它一直抛出awt headless异常。我在网上查了一下,尝试了这些方法,但都没有解决问题!
http://imagej.1557.n6.nabble.com/headless-imagej-td3699125.html
另外,我试图当场捕获异常,但后来发现particleanalyzer实际上没有运行(它一直返回0 particle,这是错误的)。我的mac提供了非零的结果!)。下面是java代码部分,后面是我从hadoop日志复制的异常。
如果有人在hadoop上成功使用imagej,你能给我一个可靠的代码示例吗?
提前谢谢。

try{
            ParticleAnalyzer pa = new ParticleAnalyzer(options, measurements,
                rt, THRES_AREA, 10000, 0, 1);

            pa.setup("victor", result);
            pa.run(result.getProcessor());
        }catch(Exception e){
            System.out.println("engine: awt error!");
    }

java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
    at java.awt.Window.<init>(Window.java:431)
    at java.awt.Frame.<init>(Frame.java:403)
    at java.awt.Frame.<init>(Frame.java:368)
    at ij.gui.GenericDialog.<init>(GenericDialog.java:87)
    at ij.plugin.filter.ParticleAnalyzer.showDialog(ParticleAnalyzer.java:265)
    at ij.plugin.filter.ParticleAnalyzer.setup(ParticleAnalyzer.java:220)
.....
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1083)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)
au9on6nz

au9on6nz1#

斐济项目已经投入了大量的精力使imagej的无头操作更加可行,尽管仍然存在一些限制。
三大解决方案是:
使用 --headless 旗帜
使用xvfb
重写有问题的脚本或插件
也就是说,在本例中,由于“有问题的脚本或插件”实际上是imagej的内置粒子分析器 --headless 这种方法应该有效。
有关详细信息,请参阅有关无头模式的文章。

相关问题