首页 > 解决方案 > Data proc 作业因找不到类异常而失败

问题描述

我刚开始第一次学习 GCP 和 IntelliJ SBT。如有任何基本问题,请多多包涵。

我的项目结构:

项目和 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

标签: scalaintellij-ideagoogle-cloud-platformsbt

解决方案


src目录应该在 . 指向的目录中project.in(directory)。在您的情况下,项目目录是ProcessData,而您的项目目录srcProcessData/DataProcessingJobs. 所以我猜 sbt 根本看不到你的代码,没有编译它,也没有打包它。

您可以通过打开 JAR 来检查它(毕竟它只是一个在目录中包含类的 ZIP 文件!)并通过调用show sourceDirectories来查看 sbt 在哪里寻找您的代码。


推荐阅读