2016-07-15 5 views
0

Ich versuche, meine MapReduce-Anwendung auszuführen.Iterative MapReduce (Twister) läuft Ausnahme

Dies ist die Hauptklasse:

public class GPFunctionFitting { 
    public static void main(String[] args) { 
     // .... 
     GPFunctionFitting client; 
     try { 
      client = new GPFunctionFitting(); 
      client.runMapReduce(partitionFile, numMapTasks); // line 44 
      // ... 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Und die Methode:

public ExpressionTree runMapReduce(String partitionFile, int numMapTasks) throws Exception { 

     JobConf jobConf = new JobConf("gp-function-fitting-map-reduce" + uuidGen.generateRandomBasedUUID()); 
     jobConf.setMapperClass(GPMapTask.class); 
     jobConf.setReducerClass(GPReduceTask.class); 
     jobConf.setCombinerClass(GPCombiner.class); 
     jobConf.setNumMapTasks(numMapTasks); 
     jobConf.setNumReduceTasks(1); 

     TwisterModel driver = new TwisterDriver(jobConf); 
     driver.configureMaps(partitionFile); // line 74 
     TwisterMonitor monitor = driver.runMapReduce(); 
     monitor.monitorTillCompletion(); 
     ExpressionTree solution = ((GPCombiner) driver.getCurrentCombiner()).getResult(); 

     driver.close(); 

     return solution; 
    } 

Dies ist das Protokoll von Eclipse Konsole:

JobID: 
gp-function-fitting-map-reduce9f25c1da-ab8b-446b-b453-d60f4165b3a9 
TransmissionManager: There is a pending/ongoing transfer on 
niotcp:///127.0.0.1:3045 for a total of 16384 bytes 
TransmissionManager: All transfers have been completed 
CommunicationsService: Closing Link = niotcp://127.0.0.1:3045 null 0 
[main] INFO cgl.imr.client.TwisterDriver - MapReduce computation 
termintated gracefully. 

cgl.imr.base.TwisterException: Could not send all the map executor 
requests. First error is Did not receive a response from the worker.14 
[Thread-0] DEBUG cgl.imr.client.ShutdownHook - Shutting down 
completed. 
    at cgl.imr.client.TwisterDriver.configureMaps(TwisterDriver.java:360) 
    at cgl.imr.client.TwisterDriver.configureMaps(TwisterDriver.java:381) 
    at map_reduce.GPFunctionFitting.runMapReduce(GPFunctionFitting.java:74) 
    at map_reduce.GPFunctionFitting.main(GPFunctionFitting.java:44) 

Und schließlich der Fehler aus Terminal, wo ich Twister lief:

2588033 [Thread-4] ERROR cgl.imr.worker.DaemonWorker - Could not 
instantiate the Mapper. cgl.imr.base.TwisterException: Could not 
instantiate the Mapper.  at 
cgl.imr.worker.Mapper.<init (Mapper.java:120)  at 
cgl.imr.worker.DaemonWorker.handleMapperRequest(DaemonWorker.java:228) 
    at cgl.imr.worker.DaemonWorker.onEvent(DaemonWorker.java:471) 
    at cgl.imr.pubsub.nb.NBPubSubService.onEvent(NBPubSubService.java:154) 
    at cgl.narada.service.qos.impl.QosServiceImpl.routeToEventConsumer(QosServiceImpl.java:938) 
    at cgl.narada.service.qos.impl.QosServiceImpl.manageEventRoutingToDestinations(QosServiceImpl.java:530) 
    at cgl.narada.service.qos.impl.QosServiceImpl.processReceivedEvent(QosServiceImpl.java:424) 
    at cgl.narada.service.qos.impl.CommunicationsService.processDataPackets(CommunicationsService.java:236) 
    at cgl.narada.service.qos.impl.CommunicationsService.processData(CommunicationsService.java:214) 
    at cgl.narada.service.qos.impl.CommunicationsService.handleData(CommunicationsService.java:142) 
    at cgl.narada.transport.TransportHandlerImpl.dataReceived(TransportHandlerImpl.java:516) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:323) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.processBuffer(NIOTCPReceiverThread.java:329) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.readDataFromSocket(NIOTCPReceiverThread.java:247) 
    at cgl.narada.transport.niotcp.NIOTCPReceiverThread.run(NIOTCPReceiverThread.java:196) 
Caused by: java.lang.ClassNotFoundException: map_reduce.GPMapTask 
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.ClassLoader.findSystemClass(ClassLoader.java:1004)  
at cgl.imr.util.CustomClassLoader.findClass(CustomClassLoader.java:102) 
at cgl.imr.util.CustomClassLoader.loadClass(CustomClassLoader.java:129) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:348) 
at cgl.imr.worker.Mapper.<init (Mapper.java:116) ... 24 more 

Die Klasse GPMapTask existiert, implementiert die MapTask-Schnittstelle und ist im selben Paket wie die Hauptklasse. Die Partitionsdatei wird entsprechend generiert und enthält 12 Zeilen, was der Anzahl der angeforderten Kartenjobs entspricht.

Kann mir jemand wenigstens eine Idee geben, wo ich nach einem Problem suchen kann? Ich habe versucht, die "Class not found exception" zu lösen, aber ich beginne zu glauben, dass das Problem in der Partitionskonfiguration liegt.

Antwort

0

Die Klasse .class fehlt oder existiert an mehreren Stellen. Der Compiler ist dann verwirrt, da die Klassendefinition mehrdeutig ist. Stellen Sie sicher, dass alle Klassen genau einmal enthalten sind. Überprüfen Sie den Inhalt aller im Klassenpfad enthaltenen Dateien.

Löschen Sie bin Ordner, reinigen Sie und erstellen Sie das Projekt erneut. Bei Twister muss die .jar-Datei der Anwendung, die ausgeführt wird, im Verzeichnis apps/vorhanden sein. Exportieren Sie die neueste Version der Anwendung, wenn sie sich ändert (wenn sie von der IDE ausgeführt wird).

+0

Warum muss es im App-Verzeichnis sein? Die JAR muss nur auf allen Knoten am selben Ort oder vorzugsweise auf HDFS zugänglich sein. –

+0

Oh, Ok, ich dachte, dass der Ort apps/directory sein muss. –

+0

Nein =) 'hadoop jar hdfs: /// pfad/zu/file.jar' hat meistens nach meiner erfahrung funktioniert –