1
votes

Le travail de traitement des données échoue avec l'exception de classe introuvable

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:

Projet et structure de construction SBT

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
  )


1 commentaires

Une petite correction dans la dernière commande C: \ Users \ xyz \ IdeaProjects \ MySBTproject \ ProcessData \ Da‌ taProcessingJobs> SBT Package


3 Réponses :


1
votes

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.


6 commentaires

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.



0
votes

É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 entrez la description de l'image ici

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 entrez la description de l'image ici

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


0 commentaires

0
votes

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:

  • Scala 2.11.12
  • sbt 1.3.13
  • Spark SQL 2.3.2

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"


0 commentaires