hazelcast mapper class not found

hazelcast, java, mapper, mapreduce

Solution

You have to deploy all the classes on the server side as well.

Problem

I`m trying to run map/reduce task on hazelcast 3.4, but I keep getting classs not found exception I created several players and store them to IMap ``` this.conf = new ClientConfig(); HazelcastInstance cluster = HazelcastClient.newHazelcastClient(this.conf); Map<String, Player> mapPlayers = cluster.getMap("players"); for (int playerID = 0; playerID < 10000; playerID++) { Player p = new Player(); mapPlayers.put(Integer.toString(playerID), p); System.out.println("inserted player nuber " + Integer.toString(playerID)); } ``` after that I created map reduce class MRCount ``` public class MRCount { private ClientConfig conf; public MRCount() { this.conf = new ClientConfig(); this.conf.getNetworkConfig(); } public void getCount() throws ExecutionException, InterruptedException { HazelcastInstance cluster = HazelcastClient.newHazelcastClient(this.conf); IMap<String, Player> mapPlayers = cluster.getMap("players"); KeyValueSource<String, Player> source = KeyValueSource.fromMap(mapPlayers); JobTracker jobTracker = cluster.getJobTracker("default"); Job<String, Player> job = jobTracker.newJob(source); ICompletableFuture<Map<String, Integer>> future = job.mapper(new MyMapper()) .reducer(new MyReducerFactory()).submit(); // future.andThen(buildCallback()); Map<String, Integer> result = future.get(); for (Map.Entry<String, Integer> e: result.entrySet()) { System.out.println(e.getKey() + ": " + Integer.toString(e.getValue()) ); } cluster.shutdown(); } } ``` mapper class: ``` public class MyMapper implements Mapper<String, Player, String, Integer> { @Override public void map(String key, Player value, Context<String, Integer> context) { context.emit("total", 1); } } public class MyReducerFactory implements ReducerFactory<String, Integer, Integer>{ @Override public Reducer<Integer, Integer> newReducer(String key) { return new MyReducer(); } private class MyReducer extends Reducer<Integer, Integer> { private volatile Integer result = 0; @Override public void reduce(Integer value) { result += value; } @Override public Integer finalizeReduce() { return result; } } } ``` I builded my project with maven. when I start the import functions everything goes well and I`ve got players stored in HZ cluster, but when i start the MRCount.getCount() function I keep getting HazelcastSerializationException ``` Exception in thread "main" java.util.concurrent.ExecutionException: com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: com.test.queries.models.MyMapper at com.hazelcast.client.spi.impl.ClientCallFuture.resolveResponse(ClientCallFuture.java:214) at com.hazelcast.client.spi.impl.ClientCallFuture.access$000(ClientCallFuture.java:53) at com.hazelcast.client.spi.impl.ClientCallFuture$1.run(ClientCallFuture.java:286) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76) at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92) Caused by: com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: com.test.queries.models.MyMapper at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.read(DefaultSerializers.java:201) at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44) at com.hazelcast.nio.serialization.SerializationServiceImpl.readObject(SerializationServiceImpl.java:309) at com.hazelcast.nio.serialization.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:439) at com.hazelcast.mapreduce.impl.client.ClientMapReduceRequest.readData(ClientMapReduceRequest.java:226) at com.hazelcast.mapreduce.impl.client.ClientMapReduceRequest.read(ClientMapReduceRequest.java:181) at com.hazelcast.client.impl.client.ClientRequest.readPortable(ClientRequest.java:116) at com.hazelcast.nio.serialization.PortableSerializer.read(PortableSerializer.java:88) at com.hazelcast.nio.serialization.PortableSerializer.read(PortableSerializer.java:30) at com.hazelcast.nio.serialization.StreamSerializerAdapter.toObject(StreamSerializerAdapter.java:65) at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:260) at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.loadRequest(ClientEngineImpl.java:364) at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.run(ClientEngineImpl.java:340) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76) at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92) at ------ End remote and begin local stack-trace ------.(Unknown Source) at com.hazelcast.client.spi.impl.ClientCallFuture.resolveResponse(ClientCallFuture.java:201) ... 7 more Caused by: java.lang.ClassNotFoundException: com.test.queries.models.MyMapper at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at com.hazelcast.nio.ClassLoaderUtil.tryLoadClass(ClassLoaderUtil.java:124) at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:113) at com.hazelcast.nio.IOUtil$1.resolveClass(IOUtil.java:113) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.read(DefaultSerializers.java:196) at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44) at com.hazelcast.nio.serialization.SerializationServiceImpl.readObject(SerializationServiceImpl.java:309) at com.hazelcast.nio.serialization.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:439) at com.hazelcast.mapreduce.impl.client.ClientMapReduceRequest.readData(ClientMapReduceRequest.java:226) at com.hazelcast.mapreduce.impl.client.ClientMapReduceRequest.read(ClientMapReduceRequest.java:181) at com.hazelcast.client.impl.client.ClientRequest.readPortable(ClientRequest.java:116) at com.hazelcast.nio.serialization.PortableSerializer.read(PortableSerializer.java:88) at com.hazelcast.nio.serialization.PortableSerializer.read(PortableSerializer.java:30) at com.hazelcast.nio.serialization.StreamSerializerAdapter.toObject(StreamSerializerAdapter.java:65) at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:260) at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.loadRequest(ClientEngineImpl.java:364) at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.run(ClientEngineImpl.java:340) ... 5 more ```

Original source