S.兼容性问题 Scala 和 Spark 编译jar文件

我完全是新手 Scala 和 Spark. 在版本中,我有一些错误 Scala, 所以我试图改变版本 Scala 在
pom.xml

, 启动我的文件 jar 在群集中。 最后,我发现成功的版本 Scala, 谁发布了 jar, 曾是
2.11

.

但是,我是一个有点好奇的版本 Scala, 因为我的版本 Scala, 安装在我的群集上是 2.10.4, 当我命令时
scala -version

在 bash shell /不是
2.11

/., 什么是更奇怪的,所以这是什么文件 jar 当我更改版本时不起作用 scala
2.11


2.10


pom.xml

, 制作相同的版本 scala. 他抛出一个错误,如下所示。


Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror/Ljava/lang/ClassLoader;/Lscala/reflect/api/JavaMirrors$JavaMirror;
at com.bistel.scala.App$.main/App.scala:17/
at com.bistel.scala.App.main/App.scala/
at sun.reflect.NativeMethodAccessorImpl.invoke0/Native Method/
at sun.reflect.NativeMethodAccessorImpl.invoke/NativeMethodAccessorImpl.java:57/
at sun.reflect.DelegatingMethodAccessorImpl.invoke/DelegatingMethodAccessorImpl.java:43/
at java.lang.reflect.Method.invoke/Method.java:606/
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain/SparkSubmit.scala:736/
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1/SparkSubmit.scala:185/
at org.apache.spark.deploy.SparkSubmit$.submit/SparkSubmit.scala:210/
at org.apache.spark.deploy.SparkSubmit$.main/SparkSubmit.scala:124/
at org.apache.spark.deploy.SparkSubmit.main/SparkSubmit.scala/


当我更改版本时 scala 在
2.11

, 她再次工作得很好,并没有泄露任何错误。
我想了解兼容性 Spark 和 Scala, 但是以上不恰当的问题让我陷入困境。

任何帮助将不胜感激。

我安装了两个版本
pom.xml

/首先 scala 版本
2.11

, 和另一个
2.10

/.

以下是一个很好的人。 他的版本 scala - 这是 2.11, 就像声明的那样。


<project xmlns="[url=http://maven.apache.org/POM/4.0.0"]http://maven.apache.org/POM/4.0.0"[/url] xmlns:xsi="[url=http://www.w3.org/2001/XMLSchema-instance"]http://www.w3.org/2001/XMLSchema-instance"[/url] xsi:schemalocation="[url=http://maven.apache.org/POM/4.0.0]http://maven.apache.org/POM/4.0.0[/url] [url=http://maven.apache.org/maven-v4_0_0.xsd">]http://maven.apache.org/maven-v4_0_0.xsd">[/url]
<modelversion>4.0.0</modelversion>
<groupid>com.bistel.scala</groupid>
<artifactid>scala-001</artifactid>
<version>1.0-SNAPSHOT</version>
<name>${project.artifactId}</name>
<description>My wonderfull scala app</description>
<inceptionyear>2015</inceptionyear>
<licenses>
<license>
<name>My License</name>
<url>[url=http://....</url>]http://....</url>[/url]
<distribution>repo</distribution>
</license>
</licenses>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.version>2.11.8</scala.version>
<scala.compat.version>2.11</scala.compat.version>
</properties>
<dependencies>
<dependency>
<groupid>org.scala-lang</groupid>
<artifactid>scala-library</artifactid>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupid>org.scala-lang</groupid>
<artifactid>scala-reflect</artifactid>
<version>${scala.version}</version>
</dependency>
<!-- [url=https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10]https://mvnrepository.com/arti ... _2.10[/url] -->
<dependency>
<groupid>org.apache.spark</groupid>
<artifactid>spark-core_2.11</artifactid>
<version>2.0.1</version>
</dependency>
<!-- [url=https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10]https://mvnrepository.com/arti ... _2.10[/url] -->
<dependency>
<groupid>org.apache.spark</groupid>
<artifactid>spark-sql_2.11</artifactid>
<version>2.0.1</version>
</dependency>
<dependency>
<groupid>org.specs2</groupid>
<artifactid>specs2-junit_${scala.compat.version}</artifactid>
<version>2.4.16</version>
<scope>test</scope>
</dependency>
<!-- Test -->
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.specs2</groupid>
<artifactid>specs2-core_${scala.compat.version}</artifactid>
<version>2.4.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.scalatest</groupid>
<artifactid>scalatest_${scala.compat.version}</artifactid>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourcedirectory>src/main/scala</sourcedirectory>
<testsourcedirectory>src/test/scala</testsourcedirectory>
<plugins>
<plugin>
<!-- see [url=http://davidb.github.com/scala-maven-plugin]http://davidb.github.com/scala-maven-plugin[/url] -->
<groupid>net.alchim31.maven</groupid>
<artifactid>scala-maven-plugin</artifactid>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<args>
<arg>-dependencyfile</arg>
<arg>${project.build.directory}/.scala_dependencies</arg>
</args>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-surefire-plugin</artifactid>
<version>2.18.1</version>
<configuration>
<usefile>false</usefile>
<disablexmlreport>true</disablexmlreport>
<!-- If you have classpath issue like NoDefClassError,... -->
<!-- useManifestOnlyJar>false</useManifestOnlyJar -->
<includes>
<include>**/*Test.*</include>
<include>**/*Suite.*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</project>


以下是没有工作的。 他的版本 scala - 这是 2.10, 就像声明的那样。


<project xmlns="[url=http://maven.apache.org/POM/4.0.0"]http://maven.apache.org/POM/4.0.0"[/url] xmlns:xsi="[url=http://www.w3.org/2001/XMLSchema-instance"]http://www.w3.org/2001/XMLSchema-instance"[/url] xsi:schemalocation="[url=http://maven.apache.org/POM/4.0.0]http://maven.apache.org/POM/4.0.0[/url] [url=http://maven.apache.org/maven-v4_0_0.xsd">]http://maven.apache.org/maven-v4_0_0.xsd">[/url]
<modelversion>4.0.0</modelversion>
<groupid>com.bistel.scala</groupid>
<artifactid>scala-001</artifactid>
<version>1.0-SNAPSHOT</version>
<name>${project.artifactId}</name>
<description>My wonderfull scala app</description>
<inceptionyear>2015</inceptionyear>
<licenses>
<license>
<name>My License</name>
<url>[url=http://....</url>]http://....</url>[/url]
<distribution>repo</distribution>
</license>
</licenses>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.version>2.10.4</scala.version>
<scala.compat.version>2.10</scala.compat.version>
</properties>
<dependencies>
<dependency>
<groupid>org.scala-lang</groupid>
<artifactid>scala-library</artifactid>
<version>${scala.version}</version>
</dependency>
<!-- [url=https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10]https://mvnrepository.com/arti ... _2.10[/url] -->
<dependency>
<groupid>org.apache.spark</groupid>
<artifactid>spark-core_2.10</artifactid>
<version>2.0.1</version>
</dependency>
<!-- [url=https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10]https://mvnrepository.com/arti ... _2.10[/url] -->
<dependency>
<groupid>org.apache.spark</groupid>
<artifactid>spark-sql_2.10</artifactid>
<version>2.0.1</version>
</dependency>
<dependency>
<groupid>org.specs2</groupid>
<artifactid>specs2-junit_${scala.compat.version}</artifactid>
<version>2.4.16</version>
<scope>test</scope>
</dependency>
<!-- Test -->
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.specs2</groupid>
<artifactid>specs2-core_${scala.compat.version}</artifactid>
<version>2.4.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.scalatest</groupid>
<artifactid>scalatest_${scala.compat.version}</artifactid>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourcedirectory>src/main/scala</sourcedirectory>
<testsourcedirectory>src/test/scala</testsourcedirectory>
<plugins>
<plugin>
<!-- see [url=http://davidb.github.com/scala-maven-plugin]http://davidb.github.com/scala-maven-plugin[/url] -->
<groupid>net.alchim31.maven</groupid>
<artifactid>scala-maven-plugin</artifactid>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<args>
<arg>-dependencyfile</arg>
<arg>${project.build.directory}/.scala_dependencies</arg>
</args>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-surefire-plugin</artifactid>
<version>2.18.1</version>
<configuration>
<usefile>false</usefile>
<disablexmlreport>true</disablexmlreport>
<!-- If you have classpath issue like NoDefClassError,... -->
<!-- useManifestOnlyJar>false</useManifestOnlyJar -->
<includes>
<include>**/*Test.*</include>
<include>**/*Suite.*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</project>
已邀请:

龙天

赞同来自:

有几个元素必须兼容:
1. 版本 spark 在驾驶员上 /和表演者如果你不使用纱线分发罐子/
2. 版本 spark 在你的pom.
3. 版本 scala 在源头

1/

版本 spark 在你的司机上 /+ 表演者/

: 主要是你有某种版本 spark. 这个版本 spark 编译了一些版本 scala /默认为 spark 2.X.X 用过的 scala 2.11/.
没关系哪个版本 scala 安装在群集中,只有银行中包含的内容 spark.
相同的版本 spark 必须安装在所有群集节点上 /yarn 允许您在启动新应用程序时分发这些银行,因此在这种情况下,您可以拥有多个版本 spark, 合作/.

2/

版本 spark 在你的 pom:

当你创造自己的时候 pom, 你包括一些瘾,包括 spark. 他们有 _2.10 或者 _2.11, 添加到他们的结尾,代表了该版本 scala, 恰逢这些依赖性。 版本 spark 可能与安装有所不同 spark 有向后兼容性 /至少在主要版本中/, 因此,您可以使用该版本 spark 2.0.1 在你的 pom, 即使你的群集有 2.1.0 /虽然不保证相反/. 版本 scala 必须与已建立的版本重合 spark.

3/ 最后,你有

版本 scala, 用于编译

. 它应该再次与版本相同 scala spark.

可能,您还应该设置依赖项的范围。 spark, 如为之提供,以避免与已安装的版本冲突。

裸奔

赞同来自:

你正在使用 spark 2.0.1. 在网站下载 spark:
http://spark.apache.org/downloads.html
, 什么

从版本开始 2.0, Spark 默认构建 Scala 2.11. Scala 2.10 用户必须下载原始包。 Spark 并建立支持 Scala 2.10.

什么版本 spark 在你的群集?
您可以尝试安装 spark 2.0.1 和 scala 2.11 在群集中。 这可以帮助。

要回复问题请先登录注册