如何在 Spark 集群上运行 Spring Boot 应用程序

Posted

技术标签:

【中文标题】如何在 Spark 集群上运行 Spring Boot 应用程序【英文标题】:How to run spring boot application on Spark cluster 【发布时间】:2017-04-21 12:08:28 【问题描述】:

我们已经生成了一个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 提交功能在集群模式下运行它时,我们遇到了问题。 我们怀疑像 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");
      
     
    

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

【问题讨论】:

【参考方案1】:

通过测试“在现实生活中”运行事情很尴尬。 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();
  

【讨论】:

我们尝试了上述方法,但仍然得到 NullPointer 异常。由于日志中缺少信息,我们无法确定异常原因。您能否提供有关处理此问题的更多线索。如果您可以提供有关部署 Springboot 应用程序的任何链接或文档,那将很有帮助

以上是关于如何在 Spark 集群上运行 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将应用程序打包到能够在 Kubernetes 中的 Spark 集群上运行的 docker 镜像中?

Zeppelin+Spark+Kubernetes:让 Zeppelin Job 在现有的 Spark 集群上运行

在 HDIinsight 集群上运行 spark 作业时如何解决此致命错误?会话 681 意外地达到了“死亡”的最终状态。查看日志:

Spark 独立集群如何在工作节点上管理多个执行程序?

如何暂停 Spark 集群上的作业以及如何恢复它?

如何在Spark集群的work节点上启动多个Executor?