在hadoop中使用ImageJ并获得无头的异常

时间:2012-10-26 05:07:14

标签: java hadoop awt imagej

我一直在尝试使用ImageJ 1.45 / ImageJA的ParticleAnalyzer构建图像处理应用程序。该算法已在我的Mac上完美测试,但当我将可运行的jar发送到hadoop集群时,它仍然抛出了无头的awt异常。我在网上查了一下并尝试了这些方法,但没有一个能解决这个问题!

http://imagej.1557.n6.nabble.com/Headless-ImageJ-td3699125.html

另外,我试图在现场捕捉异常,但后来我发现ParticleAnalyzer实际上没有运行(它一直返回0粒子,这是错误的。我的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)

1 个答案:

答案 0 :(得分:1)

尽管仍存在一些局限性,Fiji project已经投入大量精力使ImageJ无头操作变得更加可行。

三个主要解决方案是:

  1. 使用--headless旗帜
  2. 运行斐济
  3. 使用Xvfb
  4. 重写有问题的脚本或插件
  5. 那就是说,在这种情况下,由于“有问题的脚本或插件”实际上是ImageJ内置的粒子分析器,--headless方法应该可行。

    有关详细信息,请参阅headless mode上的文章。