数据处理作业失败,找不到类异常

时间:2020-07-24 09:31:43

标签: scala intellij-idea google-cloud-platform sbt

我才刚开始学习GCP和IntelliJ SBT。请回答任何基本问题。

我的项目结构:

Project and SBT Build structure

这是我的SBT.Build

name :: =“ MySBTproject”

<table>

然后我从Terminal运行SBT包以创建一个jar,如下所示

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
  )

将此jar部署到GCP存储桶后,我尝试使用数据proc运行该作业

C:\Users\xyz\IdeaProjects\MySBTproject>SBT Package 

我一旦完成工作,就会遇到错误

  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 

是因为我的自定义项目目录结构和build.sbt不同步吗?

是否需要任何更改,还是需要从项目子目录中创建一个jar,如下所示?

Job failed with message [java.lang.ClassNotFoundException: com.test.processing.jobs.mytestmain] 

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

由于我没有权限编辑问题,因此我将详细信息作为答案。一旦获得正确的答案,我将删除答案。

下面是我从IntelliJ窗口面板上的“运行”运行时遇到的错误 enter image description here

我还验证了Jar文件,发现那里没有类,下面是jar和清单文件的内容。

Manifest-Version: 1.0
Implementation-Title: MySBTproject
Implementation-Version: 0.1.0-SNAPSHOT
Specification-Vendor: default
Specification-Title: MySBTproject
Implementation-Vendor-Id: default
Specification-Version: 0.1.0-SNAPSHOT
Implementation-Vendor: default

和JAR文件的内容在下面的图像中 enter image description here

请您告知需要做些什么。

当我在下面的sbt shell中运行show directory命令时,输出为

MySBTproject> show sourceDirectories
    [info] root / Compile / sourceDirectories
    [info]  List(C:\Users\XXXXX\IdeaProjects\MySBTproject\DataProcessingjobs\src\main\scala-2.11, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\DataProcessingjobs\src\main\scala, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\DataProcessingjobs\src\main\java, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\DataProcessingjobs\target\scala-2.11\src_managed\main)
    [info] Compile / sourceDirectories
    [info]  List(C:\Users\XXXXXX\IdeaProjects\MySBTproject\src\scala-2.12, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\src\scala, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\src\java, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\target\scala-2.12\src_managed\main
    
    [info]  List(C:\Users\XXXXXX\IdeaProjects\MySBTproject\src\scala-2.12, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\src\scala, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\src\java, C:\Users\XXXXXXXXX\IdeaProjects\MySBTproject\target\scala-2.12\src_managed\main)
    [IJ]sbt:MySBTproject>

答案 2 :(得分:0)

我最近在Google Cloud DataProc上执行jar时收到了相同的错误。我不确定这是否与您遇到的问题相同,但是如果您仍然遇到此问题并且尚未解决,请尝试一下。

我的设置是:

  • Scala 2.11.12
  • sbt 1.3.13
  • Spark SQL 2.3.2

对我来说,该问题与io.grpc.internal.DnsNameResolverProvider.enable_grpclb中系统属性grpc v1.29.0的删除有关。从2020年10月8日起,您可以在 googleapis / java-logging issue on github上了解有关此内容的更多信息。查找用户 athakor 的评论。

解决方案是添加依赖项:

libraryDependencies += "com.google.cloud" % "google-cloud-logging" % "1.102.0" exclude("io.grpc", "grpc-alts")

libraryDependencies += "io.grpc" % "grpc-alts" % "1.29.0"