2017-04-21 3 views
3

Nous avons généré une application de démarrage de java java spring spring.
Comment faire pour exécuter l'application de démarrage de printemps sur le cluster Spark

 ./spark-submit --class com.recordlinkage.coreTest.IntegratedRecordLinkageTest 
       --deploy-mode cluster 
       --master spark://UCSL-GKL-HDP-02:6066/home/hadoop/spark-2.1.0-bin-hadoop2.7/bin/AIRecordLinkage.jar 

Il fonctionne sans erreur dans Eclipse dans le système que nous avons développé ce, avant de l'exporter à pot. en essayant de l'exécuter en mode cluster à l'aide de la fonction d'envoi d'étincelle autonome, nous sommes confrontés à un problème. Nous suspectons que les variables de ressort comme autowired ne sont pas dans leur contexte, par conséquent les objets ne sont pas construits. Par conséquent, nous obtenons exception NullPointer

 Exception in thread "main" java.lang.NullPointerException 
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
       at java.lang.reflect.Method.invoke(Method.java:498) 
       at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:58) 
       at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala) 

Nous courons sur la classe de test, voici le code ci-dessous

@RunWith(SpringRunner.class) 
    @SpringBootTest 
    public class IntegratedRecordLinkageTest { 
    @Autowired 
    private LoadCSV loadCSV; 

    @Autowired 
    private Environment envirnoment; 

    @Autowired 
    private IntegratedRecordLinkage integratedRecordLinkage; 


    @Test 
    public void testLoadCSVFile() { 

     try{ 
     integratedRecordLinkage.link(); 
     } 
     catch(Exception e){ 
     e.printStackTrace(); 
     Assert.fail("Exception Occurred"); 
     } 
    } 
    } 

Veuillez nous faire savoir comment exécuter l'application de démarrage de printemps sur le cluster

Répondre

2

Il est difficile de faire fonctionner les choses «dans la vraie vie» via un test. Le modèle de configuration de Maven - utilisé par de nombreux outils de construction en dehors de Maven lui-même - suppose que le code et la configuration sont différents en fonction de la portée: compilation, exécution, test, etc. beaucoup de sens pour moi. Il est bon d'essayer quelque chose de peu orthodoxe, mais votre configuration actuelle semble être beaucoup plus de problèmes que cela en vaut la peine.

Au lieu de cela, je courrais les choses de la façon dont vous êtes censé:

@SpringBootApplication 
@EnableBatchProcessing 
public class AIRecordLinkage implements CommandLineRunner { 

    @Autowired 
    private LoadCSV loadCSV; 

    @Autowired 
    private Environment environment; 

    @Autowired 
    private IntegratedRecordLinkage integratedRecordLinkage; 


    public static void main(String[] args) { 
    SpringApplication.run(AIRecordLinkage.class, args); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
    integratedRecordLinkage.link(); 
    } 
} 
+1

Nous avons essayé la méthode ci-dessus, mais encore obtenir l'exeption NullPointer. nous sommes incapables d'identifier la cause de l'exception en raison du manque d'informations dans le journal. Vous pouvez donner plus d'informations sur la façon de traiter ce problème. Si vous pouvez fournir un lien ou de la documentation sur le déploiement d'une application Springboot, il sera utile – Shreeharsha