我才刚开始学习GCP和IntelliJ SBT。请回答任何基本问题。
我的项目结构:
这是我的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]
答案 0 :(得分:1)
src
目录应位于project.in(directory)
指向的目录中。在您的情况下,项目目录为ProcessData
,而您的src
在ProcessData/DataProcessingJobs
中。因此,我猜测sbt根本看不到您的代码,也没有编译它,也没有打包它。
您可以通过打开JAR(毕竟这只是目录中包含类的ZIP文件!)并调用show sourceDirectories
来查看sbt在哪里寻找代码来进行检查。
答案 1 :(得分:0)
由于我没有权限编辑问题,因此我将详细信息作为答案。一旦获得正确的答案,我将删除答案。
下面是我从IntelliJ窗口面板上的“运行”运行时遇到的错误
我还验证了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
请您告知需要做些什么。
当我在下面的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时收到了相同的错误。我不确定这是否与您遇到的问题相同,但是如果您仍然遇到此问题并且尚未解决,请尝试一下。
我的设置是:
对我来说,该问题与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"