Есть много вопросов о ClassNotFoundException
но я еще не видел (пока), которые соответствуют этому конкретному случаю. Я пытаюсь выполнить следующую команду:
spark-submit --master local[*] --class com.stronghold.HelloWorld scala-ts.jar
Это исключает следующее:
\u@\h:\w$ spark_submit --class com.stronghold.HelloWorld scala-ts.jar ⬡ 9.8.0 [±master ●●●]
2018-05-06 19:52:33 WARN Utils:66 - Your hostname, asusTax resolves to a loopback address: 127.0.1.1; using 192.168.1.184 instead (on interface p1p1)
2018-05-06 19:52:33 WARN Utils:66 - Set SPARK_LOCAL_IP if you need to bind to another address
2018-05-06 19:52:33 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.lang.ClassNotFoundException: com.stronghold.HelloWorld
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:235)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:836)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
2018-05-06 19:52:34 INFO ShutdownHookManager:54 - Shutdown hook called
2018-05-06 19:52:34 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-e8a77988-d30c-4e96-81fe-bcaf5d565c75
Тем не менее, в банке явно содержится этот класс:
1 " zip.vim version v28
1 " Browsing zipfile /home/[USER]/projects/scala_ts/out/artifacts/TimeSeriesFilter_jar/scala-ts.jar
2 " Select a file with cursor and press ENTER
3
4 META-INF/MANIFEST.MF
5 com/
6 com/stronghold/
7 com/stronghold/HelloWorld$.class
8 com/stronghold/TimeSeriesFilter$.class
9 com/stronghold/DataSource.class
10 com/stronghold/TimeSeriesFilter.class
11 com/stronghold/HelloWorld.class
12 com/stronghold/scratch.sc
13 com/stronghold/HelloWorld$delayedInit$body.class
Как правило, зависание здесь происходит от файловой структуры, но я уверен, что здесь правильно:
../
scala_ts/
| .git/
| .idea/
| out/
| | artifacts/
| | | TimeSeriesFilter_jar/
| | | | scala-ts.jar
| src/
| | main/
| | | scala/
| | | | com/
| | | | | stronghold/
| | | | | | DataSource.scala
| | | | | | HelloWorld.scala
| | | | | | TimeSeriesFilter.scala
| | | | | | scratch.sc
| | test/
| | | scala/
| | | | com/
| | | | | stronghold/
| | | | | | AppTest.scala
| | | | | | MySpec.scala
| target/
| README.md
| pom.xml
Я выполнял другие задания с той же структурой на работе (так, в другой среде). Теперь я пытаюсь получить еще один объект с домашним проектом, но это, кажется, рано повесить.
В двух словах, я просто пропустил что-то очевидное?
ПРИЛОЖЕНИЕ
Для тех, кого это интересует, вот мой pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stronghold</groupId>
<artifactId>scala-ts</artifactId>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2008</inceptionYear>
<properties>
<scala.version>2.11.8</scala.version>
</properties>
<repositories>
<repository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scala-tools.testing</groupId>
<artifactId>specs_2.10</artifactId>
<version>1.6.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-catalyst_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>true</downloadSources>
<buildcommands>
<buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
</buildcommands>
<additionalProjectnatures>
<projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
</additionalProjectnatures>
<classpathContainers>
<classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
<classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>
</classpathContainers>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
ОБНОВИТЬ
Извинения за отсутствие ясности. Я выполнил команду из той же директории, что и .jar
(/home/[USER]/projects/scala_ts/out/artifacts/TimeSeriesFilter_jar/
). Тем не менее, чтобы быть ясным, указание полного пути не меняет результат.
Следует также отметить, что я могу запустить HelloWorld из Intellij, и он использует ту же ссылку на класс (com.stronghold.HelloWorld
).
Боясь, что это не проблема. Я ранее пытался удалить все в проекте и начать все сначала, но это тоже не сработало. Когда-то мне пришло в голову совсем другой проект, он работал нормально. По-видимому Intellij (из которых я фанат) решил где-то создать скрытую проблему.
Почему вы не используете путь к файлу jar, поэтому spark-submit
(как и любой другой инструмент командной строки) может найти и использовать его?
Учитывая путь out/artifacts/TimeSeriesFilter_jar/scala-ts.jar
я бы использовал следующее:
spark-submit --class com.stronghold.HelloWorld out/artifacts/TimeSeriesFilter_jar/scala-ts.jar
Обратите внимание, что вы должны находиться в главном каталоге проекта, который, как представляется, является /home/[USER]/projects/scala_ts
.
Также обратите внимание, что я удалил --master local[*]
так как использует стандартный URL spark-submit
адрес, --master local[*]
по умолчанию.
Попробуйте добавить плагин maven-shade и выполнить> run.
Вот ссылка, это может вам помочь.
Получение java.lang.ClassNotFoundException при запуске приложения Spark
Глядя на ваш файл pom, файл jar, который вы указываете, не соответствует тому, что у вас есть в файле pom, как
<artifactId>scala-ts</artifactId>
<version>1.0-SNAPSHOT</version>
Вышеуказанная строка в файле pom предполагает, что ваш файл jar должен быть scala-ts-1.0-SNAPSHOT.jar
но вы использовали только scala-ts.jar
. Поэтому я предполагаю, что вы ссылаетесь на старую банку.
Вот несколько шагов, которые вы можете применить
1. clean the project and package again
2. make sure the jar file name by going to target folder of the project
3. you can give the exact path to the target folder to point to the jar when you apply spark-submit command