2017-04-21 100 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

相關問題