数据处理作业失败,出现 Class 未找到异常
Data proc job is failing with Class not found exception
我刚开始第一次学习 GCP 和 IntelliJ SBT time.Please 请耐心等待任何基本问题。
我的项目结构:
这是我的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 存储桶后,我尝试运行使用数据处理
完成作业
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 在哪里寻找您的代码来检查它。
由于我没有编辑问题的权限,所以我将详细信息作为 answer.Once 附上,我得到了正确的答案,我将删除我的答案。
下面是我在 IntelliJ window 面板上从“运行”运行ning 时遇到的错误
我也验证了jar文件,发现没有类,下面是jar和manifest文件的内容。
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文件内容如下图
请您就进一步需要做的事情提出建议。
当我 运行 在 sbt shell 中显示目录命令时,下面是输出
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>
我最近在 Google Cloud DataProc 上执行 jar 时收到同样的错误。我不确定这是否与您遇到的问题相同,但如果您仍然遇到此问题且尚未解决,请尝试一下。
我的设置是:
- Scala 2.11.12
- sbt 1.3.13
- Spark SQL 2.3.2
对我来说,问题与 grpc v1.29.0
中系统 属性 io.grpc.internal.DnsNameResolverProvider.enable_grpclb
的删除有关。您可以从 2020 年 10 月 8 日起在 googleapis/java-logging issue on github 阅读更多相关信息。查找用户 athakor[=32= 的评论].
解决方案是添加依赖项:
libraryDependencies += "com.google.cloud" % "google-cloud-logging" % "1.102.0" exclude("io.grpc", "grpc-alts")
libraryDependencies += "io.grpc" % "grpc-alts" % "1.29.0"
我刚开始第一次学习 GCP 和 IntelliJ SBT time.Please 请耐心等待任何基本问题。
我的项目结构:
这是我的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 存储桶后,我尝试运行使用数据处理
完成作业 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 在哪里寻找您的代码来检查它。
由于我没有编辑问题的权限,所以我将详细信息作为 answer.Once 附上,我得到了正确的答案,我将删除我的答案。
下面是我在 IntelliJ window 面板上从“运行”运行ning 时遇到的错误
我也验证了jar文件,发现没有类,下面是jar和manifest文件的内容。
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文件内容如下图
请您就进一步需要做的事情提出建议。
当我 运行 在 sbt shell 中显示目录命令时,下面是输出
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>
我最近在 Google Cloud DataProc 上执行 jar 时收到同样的错误。我不确定这是否与您遇到的问题相同,但如果您仍然遇到此问题且尚未解决,请尝试一下。
我的设置是:
- Scala 2.11.12
- sbt 1.3.13
- Spark SQL 2.3.2
对我来说,问题与 grpc v1.29.0
中系统 属性 io.grpc.internal.DnsNameResolverProvider.enable_grpclb
的删除有关。您可以从 2020 年 10 月 8 日起在 googleapis/java-logging issue on github 阅读更多相关信息。查找用户 athakor[=32= 的评论].
解决方案是添加依赖项:
libraryDependencies += "com.google.cloud" % "google-cloud-logging" % "1.102.0" exclude("io.grpc", "grpc-alts")
libraryDependencies += "io.grpc" % "grpc-alts" % "1.29.0"