Je viens de commencer à apprendre GCP et IntelliJ SBT pour la première fois. Merci de m'accompagner pour toute question de base.
Ma structure de projet:
Voici mon SBT.Build
nameÂ: = Â "MySBTproject"
C:\Users\xyz\IdeaProjects\MySBTproject\ProcessDataDataProcessingJobs>SBT Package
Ensuite, j'ai exécuté le package SBT à partir du terminal pour créer un pot comme indiqué ci-dessous
Job failed with message [java.lang.ClassNotFoundException: com.test.processing.jobs.mytestmain]
Après avoir déployé ce fichier jar sur le bucket GCP, j'ai essayé d'exécuter la tâche à l'aide de 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
J'obtiens une erreur en dessous une fois que j'exécute le travail
C:\Users\xyz\IdeaProjects\MySBTproject>SBT Package
Est-ce à cause de la structure de répertoires de mon projet personnalisé et du fait que build.sbt n'est pas synchronisé?
Des modifications sont-elles nécessaires ou dois-je créer un fichier jar à partir du sous-répertoire du projet comme indiqué ci-dessous?
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   )
3 Réponses :
src
répertoire src
doit être dans le répertoire indiqué par project.in(directory)
. Dans votre cas, le répertoire de projet est ProcessData
, tandis que votre src
est dans ProcessData/DataProcessingJobs
. Donc, je suppose que sbt ne voit pas du tout votre code, ne le compile pas et ne le conditionne pas.
Vous pouvez le vérifier en ouvrant JAR (après tout c'est juste un fichier ZIP avec des classes dans les répertoires!) Et en appelant show sourceDirectories
pour voir où sbt recherche votre code.
Merci pour votre réponse. Puisque nous sommes nouveaux dans SBT, pourriez-vous s'il vous plaît suggérer les changements à faire dans mon SBT.build. Je serais reconnaissant si vous pouviez fournir les détails
Faites simplement correspondre le répertoire du (sous) projet avec le répertoire qui contient src
- alors soit déplacez src d'un répertoire vers le haut, soit définissez project sur project.in("DataProcessingJobs")
.
val moutlingyaml = "net.jcazevedo" %% "moultingyaml"% "0.4.2" lazy val root = (projet dans le fichier ("DataProcessingJobs")) .settings (nom: = "DataProcessingJobs", version: = "0.0.1 -SNAPSHOT ", scalaVersion: =" 2.11.12 ", librairieDependencies + = moutlingyaml)
Nous avons effectué les modifications suggérées, mais nous obtenons toujours la même erreur.
Vous n'avez pas écrit si vous avez vérifié si votre code est dans le JAR ni quels sont les répertoires source
J'ai accepté votre réponse, mais pourriez-vous s'il vous plaît voir ma réponse ci-dessous et fournir plus de détails pour résoudre le problème. Je suis novice en sbt, donc vos contributions seraient utiles pour résoudre le problème.
Étant donné que je n'ai pas le privilège de modifier la question, je joins les détails en guise de réponse.Une fois que j'aurai la bonne réponse, je supprimerai ma réponse.
Vous trouverez ci-dessous l'erreur que j'obtiens lorsque j'exécute à partir de «exécuter» sur le panneau de la fenêtre IntelliJ
J'ai également vérifié le fichier Jar et constaté qu'aucune classe n'était là, et ci-dessous se trouvent les contnets de jar et de manifest file.
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>
et le contenu du fichier JAR est dans l'image ci-dessous
vous demander de donner des conseils sur ce qui doit être fait.
Lorsque j'ai exécuté la commande show directory dans le shell sbt ci-dessous sont les sorties
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
J'ai récemment reçu la même erreur lors de l'exécution d'un fichier jar sur Google Cloud DataProc. Je ne sais pas si c'est le même problème que vous rencontrez, mais essayez-le si vous rencontrez toujours ce problème et ne l'avez pas résolu.
Ma configuration est:
Pour moi, le problème était lié à la suppression de la propriété système io.grpc.internal.DnsNameResolverProvider.enable_grpclb
dans grpc v1.29.0
. Vous pouvez en savoir plus à ce sujet sur le problème googleapis / java-logging sur github à partir du 8 octobre 2020. Recherchez le commentaire de l'utilisateur athakor .
La résolution était d'ajouter les dépendances:
libraryDependencies += "com.google.cloud" % "google-cloud-logging" % "1.102.0" exclude("io.grpc", "grpc-alts") libraryDependencies += "io.grpc" % "grpc-alts" % "1.29.0"
Une petite correction dans la dernière commande C: \ Users \ xyz \ IdeaProjects \ MySBTproject \ ProcessData \ Da taProcessingJobs> SBT Package