javagoogle-app-enginemapreducegoogle-cloud-storagenosuchmethod

NoSuchMethodError exception from Java MapReduce pipeline POST /mapreduce/workerCallback?


Do you know of a workaround for this uncaught exception from the Java mapreduce pipeline on Google App Engine?

Is it simply a failure in GcsServiceFactory that created GCS_SERVICE in this line? https://code.google.com/p/appengine-mapreduce/source/browse/trunk/java/src/com/google/appengine/tools/mapreduce/inputs/GoogleCloudStorageLineInputReader.java?r=462#80

Any ideas on how to fix?

We are seeing this frequently:

 2013-09-24 18:18:17.819 Uncaught exception from servlet
 java.lang.NoSuchMethodError:
 com.google.appengine.tools.cloudstorage.GcsService.openPrefetchingReadChannel(Lcom/google/appengine/tools/cloudstorage/GcsFilename;JI)Ljava/nio/channels/ReadableByteChannel;
    at com.google.appengine.tools.mapreduce.inputs.GoogleCloudStorageLineInputReader.beginSlice(GoogleCloudStorageLineInputReader.java:79)
    at com.google.appengine.tools.mapreduce.impl.WorkerShardTask.run(WorkerShardTask.java:84)
    at com.google.appengine.tools.mapreduce.impl.shardedjob.ShardedJobRunner.runTask(ShardedJobRunner.java:265)
    at com.google.appengine.tools.mapreduce.impl.shardedjob.ShardedJobServiceImpl.handleWorkerRequest(ShardedJobServiceImpl.java:49)
    at com.google.appengine.tools.mapreduce.impl.handlers.MapReduceServletImpl.doPost(MapReduceServletImpl.java:76)
    at com.google.appengine.tools.mapreduce.MapReduceServlet.doPost(MapReduceServlet.java:57)

Solution

  • I see any of the below possible reasons :

    1. You did not include all the jars in classpath, they might have interdependent classes.
    2. You jar is an old version which is not having that method.
    3. Some dependent jar is missing which not allowing the class constructor to initialize the class object.