2017-04-21 109 views
3

我们已经生成了一个Jar Spark java spring引导应用程序。
如何在Spark集群上运行Spring引导应用程序

 ./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 

它运行没有我们开发它系统在eclipse中的错误,导出它之前罐子。 而尝试使用独立的火花提交功能在群集模式下运行它时,我们正面临问题。 我们怀疑像autowired这样的spring变量不在上下文中,因此不构造对象。 因此我们得到空指针异常

 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) 

我们正在运行它的测试类,这里是低于

@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"); 
     } 
    } 
    } 

请让我们知道如何在群集中运行春季启动应用程序的代码

回答

2

通过测试来运行“现实生活中的事情”很尴尬。 Maven配置模型 - 除了Maven本身之外的许多构建工具使用 - 假定代码和配置根据范围而定位于不同的地方 - 编译,运行时,测试等。在运行时范围运行测试不会产生对我来说很有意义。尝试一些非正统的东西是很好的,但是你现在的设置似乎比它的价值更麻烦。

相反,我会跑的东西,你应该的方式:

@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

我们尝试了上面的方法,但仍然得到空指针exeption。我们无法确定由于日志信息不足而导致异常的原因。您可以提供有关处理此问题的更多线索。如果你可以提供有关部署Springboot应用程序的任何链接或文档,这将有所帮助 – Shreeharsha

相关问题