scala - Data proc 作业因找不到类异常而失败
问题描述
我刚开始第一次学习 GCP 和 IntelliJ SBT。如有任何基本问题,请多多包涵。
我的项目结构:
这是我的 SBT.Build
名称:=“MySBTproject”
version := "0.1"
scalaVersion := "2.11.12"
val moutlingyaml = "net.jcazevedo" %% "moultingyaml" % "0.4.2"
lazy val root = (project in file("."))
.settings(
name := "MySBTproject",
libraryDependencies += moutlingyaml
)
然后我从终端运行 SBT 包来创建一个 jar,如下所示
C:\Users\xyz\IdeaProjects\MySBTproject>SBT Package
将此 jar 部署到 GCP 存储桶后,我尝试使用 data proc 运行作业
gcloud dataproc jobs submit spark \
--cluster my-cluster \
--region europe-north1 \
--jars gs://test-my-bucket-01/spark-jobs/mysbtproject_2.11-0.1.jar \
--class com.test.processing.jobs.mytestmain
一旦我运行工作,我就会遇到错误
Job failed with message [java.lang.ClassNotFoundException: com.test.processing.jobs.mytestmain]
是不是因为我的自定义项目目录结构和 build.sbt 不同步?
是否需要进行任何更改,或者我需要从项目子目录创建一个 jar,如下所示?
C:\Users\xyz\IdeaProjects\MySBTproject\ProcessDataDataProcessingJobs>SBT Package
解决方案
src
目录应该在 . 指向的目录中project.in(directory)
。在您的情况下,项目目录是ProcessData
,而您的项目目录src
是ProcessData/DataProcessingJobs
. 所以我猜 sbt 根本看不到你的代码,没有编译它,也没有打包它。
您可以通过打开 JAR 来检查它(毕竟它只是一个在目录中包含类的 ZIP 文件!)并通过调用show sourceDirectories
来查看 sbt 在哪里寻找您的代码。
推荐阅读
- javascript - 如何使用 reduce 过滤对象中的字段
- windows - 在所有文件和子目录中找到任何提及 google 的内容?
- html - Bootstrap 按钮块在 iPhone 上不起作用
- reactjs - 运行 webpack-dev-server 上的 VSCode 调试,跳过断点
- vue.js - 这在 Vuejs 上是未定义的
- node.js - passport-google-oauth :GooglePlusAPIError:项目中未使用旧版 People API
- c# - 基于时间戳的对象组列表
- crc - 我应该将什么初始值传递给 Aarch64 crc32 指令?
- python - 带有空行分隔的 txt 文件中的 python 中的意大利面条图
- python - 如何使用 WMI -(Windows Management Instrumentation)从 python 脚本获取远程系统硬件信息