【发布时间】:2021-05-12 12:54:27
【问题描述】:
我正在寻找有关如何在 Azure Databricks 中运行基于 Spring Boot 的 Java 应用程序的指导。
我习惯于在前提条件下在 Apache Spark 中运行基于 Spring Boot 的 Java 应用程序:Spring Boot 应用程序不会像在 Apache Spark 中那样运行。让他们运行适合我的技术是
- 使用 copy-rename-maven-plugin 重命名由 spring-boot-maven-plugin 生成的原始 jar 文件
<plugin>
<groupId>com.coderplus.maven.plugins</groupId>
<artifactId>copy-rename-maven-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>rename-file</id>
<phase>package</phase>
<goals>
<goal>rename</goal>
</goals>
<configuration>
<sourceFile>target/${project.name}-${project.version}.jar.original</sourceFile>
<destinationFile>target/${project.name}-${project.version}-original.jar</destinationFile>
</configuration>
</execution>
</executions>
</plugin>
- 有一个原始jar文件名和位置的配置项设置为原始jar文件的安装位置
- 在 spark-submit 命令中将原始文件名和位置传递给 spark 会话“-Doriginal.jar-file”
sparkConf.setJars(new String[]{props.getJarFile()});
- 使用 spark 提交运行
spark-submit --master yarn --deploy-mode client --conf "spark.driver.extraJavaOptions=-Dspring.profiles.active=dev" SparkPiBoot-0.0.1.jar
https://radanalytics.io/assets/my-first-radanalytics-app/sparkpi-java-spring.html 中概述了该技术,它与开放式班次构建一起使用。
使用这种技术,我的驱动程序应用程序在本地 Apache Spark 中运行,作为具有依赖注入等功能的成熟 Spring Boot 应用程序。数据帧代码在 Apache Spark 中运行,取自原始未经处理的 jar 文件,因此没有依赖注入等。
在 Azure Databricks 中,我打算将 Databricks 作业安排为从 Azure 数据工厂管道运行,因此我尝试了相同的技术:我在 azure databricks 文件系统中安装了 2 个 jars 文件,创建了一个 Azure 数据工厂具有指向 dbfs 中原始 jar 文件的用户属性的 Databricks Activity。
这会导致错误,应用程序将无法运行 ''' command--1:1:错误:找不到类 org.springframework.boot.CommandLineRunner - 继续使用存根。 io.radanalytics.SparkPiBootApplication.main(Array()) ^ '''
主 jar 文件是一个 Spring Boot uber jar,其中包含所有依赖 jar,包括 spring-boot-1.5.2.RELEASE.jar,其中包括 org.springframework.boot.CommandLineRunner。
【问题讨论】:
标签: spring-boot databricks azure-databricks