2017-04-18 13 views
2

私は、単純なマルチノード計算の例を実行して起動しようとしています。私はバイナリのIgnite配布で提供されignite.shと3サーバーノードを実行したignite.shスクリプトは何のために必要なのですか?

try(Ignite ignite = Ignition.start("example-cache.xml")){ 
     IgniteCompute asyncCompute = ignite.compute().withAsync(); 
     for(int i = 0; i < 100; i++) { 
      int[] a = new int[1]; 
      a[0] = i; 
      asyncCompute.call(() -> { 
       out.println(a[0]); 
       return a[0]; 
      }); 
     } 
} 

まず:私は、次の簡単なアプリケーションを書きました。それぞれ異なるJVMインスタンスにあります。

次に、私はこのアプリケーションをビルドし、前の3つのサーバーノードと同じxml-spring構成で実行します。

しかし、実際に、私は次の例外を得た:

class org.apache.ignite.IgniteCheckedException: com.test.App 
     at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9826) 
     at org.apache.ignite.internal.processors.job.GridJobWorker.initialize(GridJobWorker.java:432) 
     at org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1108) 
     at org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1894) 
     at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1222) 
     at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:850) 
     at org.apache.ignite.internal.managers.communication.GridIoManager.access$2100(GridIoManager.java:108) 
     at org.apache.ignite.internal.managers.communication.GridIoManager$7.run(GridIoManager.java:790) 
     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) 
Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException: com.test.App 
     at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:692) 
     at org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1486) 
     at org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1424) 
     at org.apache.ignite.internal.binary.BinaryReaderExImpl.readClass(BinaryReaderExImpl.java:370) 
     at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.readFixedType(BinaryFieldAccessor.java:828) 
     at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.read(BinaryFieldAccessor.java:639) 
     at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:833) 
     at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1498) 
     at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1450) 
     at org.apache.ignite.internal.binary.BinaryUtils.doReadObject(BinaryUtils.java:1640) 
     at org.apache.ignite.internal.binary.BinaryReaderExImpl.readObject(BinaryReaderExImpl.java:1124) 
     at org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2V2.readBinary(GridClosureProcessor.java:2073) 
     at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:823) 
     at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1498) 
     at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1450) 
     at org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:298) 
     at org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:99) 
     at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:82) 
     at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9820) 
     ... 10 more 
Caused by: java.lang.ClassNotFoundException: com.test.App 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:348) 
     at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8459) 
     at org.apache.ignite.internal.MarshallerContextAdapter.getClass(MarshallerContextAdapter.java:185) 
     at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:683) 

この例外は完全に透明です。しかし、何のためにignite.shスクリプトが必要ですか?

答えて

1

あなたは、ApacheのIgniteのインストールフォルダの下のlib /フォルダにJARファイルを追加する必要があります。その後、ignite.shを起動すると、すべてのクラスが自動的にロードされます。

また、上記のようにpeer-class-loadingを有効にしてみると、Igniteによってクラスが自動的に読み込まれます。

+0

アドバイスありがとうございます。しかし、お勧めの方法は何ですか? –

+0

あなたの要件によって異なります。開発段階では、ピアクラスの読み込みを有効にすることをお勧めします。これは、展開に多くの時間を節約するためです。問題が発生した場合は、JARデプロイメントに切り替えます。 – Dmitriy

関連する問題