如何在Spark集群上运行spring boot应用程序

时间:2017-04-21 12:08:28

标签: apache-spark apache-spark-sql apache-spark-2.0

我们已经生成了一个Jar of Spark java spring boot Application。

        ./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中运行时没有错误,然后将其导出到jar。 在尝试使用独立的spark提交功能在集群模式下运行它时,我们面临着问题。 我们怀疑像自动装配的弹簧变量不在上下文中,因此不构造对象。         因此我们得到了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)

我们在测试类上运行它,这是下面的代码

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

请告诉我们如何在群集上运行spring boot应用程序

1 个答案:

答案 0 :(得分: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();
  }
}