【问题标题】:Apache Ignite C#/.NET: Compute job failing, failed to deserialize jobApache Ignite C#/.NET:计算作业失败,无法反序列化作业
【发布时间】:2020-12-06 03:48:21
【问题描述】:

我是 Apache Ignite 的新手,我试图关注 Remote Assembly Loading example,但遇到了一些错误。

首先,我在 Windows 控制台中运行 Apache.Ignite.exe -ConfigFileName=[file path to Apache.Ignite.exe.config] 几次以启动集群,我的 Apache.Ignite.exe.config 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="igniteConfiguration" type="Apache.Ignite.Core.IgniteConfigurationSection, Apache.Ignite.Core" />
    </configSections>
    
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>

    <runtime>
        <gcServer enabled="true" />
    </runtime>

    <igniteConfiguration peerAssemblyLoadingMode='CurrentAppDomain' />

    <appSettings>
        <!-- Use Ignite configuration section defined above. -->
        <add key="Ignite.ConfigSectionName" value="igniteConfiguration" />
    </appSettings>

</configuration>

然后我有一个 .NET 控制台应用程序,其中我的 Program.cs 看起来像:

    class HelloAction : IComputeAction
    {
        public void Invoke()
        {
            Console.WriteLine("Hello, World!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var cfg = new IgniteConfiguration
            {
                PeerAssemblyLoadingMode = PeerAssemblyLoadingMode.CurrentAppDomain
            };

            using (var ignite = Ignition.Start(cfg))
            {
                ignite.GetCompute().Broadcast(new HelloAction());
            }
        }
    }

运行我的项目后,我遇到了以下错误

[SEVERE][sys-#61][] Failure in Java callback
class org.apache.ignite.IgniteException: Platform error:Apache.Ignite.Core.Common.IgniteException: Compute job has failed on remote node, examine InnerException for details.
 ---> Apache.Ignite.Core.Common.IgniteException: Failed to deserialize the job [errType=BadImageFormatException, errMsg=Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
 ---> Apache.Ignite.Core.Common.JavaException: class org.apache.ignite.IgniteException: Failed to deserialize the job [errType=BadImageFormatException, errMsg=Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
        at org.apache.ignite.internal.processors.platform.callback.PlatformCallbackUtils.inLongOutLong(Native Method)
        at org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway.computeJobCreate(PlatformCallbackGateway.java:295)
        at org.apache.ignite.internal.processors.platform.compute.PlatformAbstractJob.createJob(PlatformAbstractJob.java:114)
        at org.apache.ignite.internal.processors.platform.compute.PlatformClosureJob.execute0(PlatformClosureJob.java:66)
        at org.apache.ignite.internal.processors.platform.compute.PlatformAbstractJob.execute(PlatformAbstractJob.java:80)
        at org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:598)
        at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7077)
        at org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:592)
        at org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:521)
        at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1368)
        at org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:2122)
        at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GrSystem.AggregateException: One or more errors occurred. (Compute job has failed on remote node, examine InnerException for details.)
 ---> Apache.Ignite.Core.Common.IgniteException: Compute job has failed on remote node, examine InnerException for details.
 ---> Apache.Ignite.Core.Common.IgniteException: Failed to deserialize the job [errType=BadImageFormatException, errMsg=Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
 ---> Apache.Ignite.Core.Common.JavaException: class org.apache.ignite.IgniteException: Failed to deserialize the job [errType=BadImageFormatException, errMsg=Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
        at org.apache.ignite.internal.processors.platform.callback.PlatformCallbackUtils.inLongOutLong(Native Method)
        at org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway.computeJobCreate(PlatformCallbackGateway.java:295)
        at org.apache.ignite.internal.processors.platform.compute.PlatformAbstractJob.createJob(PlatformAbstractJob.java:114)
        at org.apache.ignite.internal.processors.platform.compute.PlatformClosureJob.execute0(PlatformClosureJob.java:66)
        at org.apache.ignite.internal.processors.platform.compute.PlatformAbstractJob.execute(PlatformAbstractJob.java:80)
        at org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:598)
        at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7077)
        at org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:592)
        at org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:521)
        at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1368)
        at org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:2122)
        at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1907)
        at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1528)
        at org.apache.ignite.internal.managers.communication.GridIoManager.access$5300(GridIoManager.java:241)
        at org.apache.ignite.internal.managers.communication.GridIoManager$9.execute(GridIoManager.java:1421)
        at org.apache.ignite.internal.managers.communication.TraceRunnable.run(TraceRunnable.java:55)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:830)

我想知道是什么导致了这个错误以及如何解决这个问题,谢谢!

【问题讨论】:

    标签: c# .net ignite


    【解决方案1】:

    看起来您使用的是 .NET Core 3.x,而 Apache.Ignite.exe 是使用经典 .NET Framework 构建的,因此存在兼容性问题。

    Apache Ignite 还包含一个 .NET Core 二进制文件 - platforms/dotnet/bin/netcoreapp2.0/Apache.Ignite.dll,您可以尝试使用它。

    但是,当使用对等程序集加载时,我建议在所有节点上运行完全相同的框架版本。为此,请避免使用预构建的二进制文件(Apache.Ignite.exeApache.Ignite.dll),并创建一个单独的程序来启动服务器节点:

    class Program
    {
        static void Main(string[] args)
        {
            var cfg = new IgniteConfiguration
            {
                PeerAssemblyLoadingMode = PeerAssemblyLoadingMode.CurrentAppDomain
            };
    
            using (var ignite = Ignition.Start(cfg))
            {
                Thread.Sleep(-1); // Wait forever
            }
        }
    }
    

    【讨论】:

    • 您好,感谢您的建议 - 它起作用了,因为节点发现了彼此,并且我在两个控制台上都获得了 Cluster [hosts=1, CPUs=8, servers=2, clients=0, topVer=4, minorTopVer=1]。但是,我没有看到“你好,世界!”印在任何控制台上 - 你知道为什么吗?
    • 一个简单的测试适用于我 (server, client)。仔细观察 - Hello, World 可能在所有 Ignite 输出中丢失。
    • 我仍然无法在控制台中找到Hello, World。然而,Hello, World 终于在我为服务器和客户端启动新文件时出现了
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2019-06-04
    • 2010-12-10
    • 2021-08-08
    • 2020-05-14
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多