Maven apachespark依赖性问题

Maven apachespark依赖性问题,maven,hadoop,apache-spark,apache-spark-sql,Maven,Hadoop,Apache Spark,Apache Spark Sql,我正在尝试在Hadoop集群中运行spark应用程序。 群集中运行的spark版本为1.3.1。在集群中打包和运行spark应用程序时,我遇到了如下所示的错误。我也看了其他帖子,似乎我搞乱了库依赖关系,但不知道是什么 以下是其他可能有助于你们帮助我的信息: hadoop-版本: Hadoop 2.7.1.2.3.0.0-2557 Subversion git@github.com:hortonworks/hadoop.git -r 9f17d40a0f2046d217b2bff

我正在尝试在Hadoop集群中运行spark应用程序。 群集中运行的spark版本为1.3.1。在集群中打包和运行spark应用程序时,我遇到了如下所示的错误。我也看了其他帖子,似乎我搞乱了库依赖关系,但不知道是什么

以下是其他可能有助于你们帮助我的信息:

hadoop-版本:

Hadoop 2.7.1.2.3.0.0-2557
Subversion git@github.com:hortonworks/hadoop.git -r          9f17d40a0f2046d217b2bff90ad6e2fc7e41f5e1
Compiled by jenkins on 2015-07-14T13:08Z
Compiled with protoc 2.5.0
From source with checksum 54f9bbb4492f92975e84e390599b881d
This command was run using /usr/hdp/2.3.0.0-2557/hadoop/lib/hadoop-common-2.7.1.2.3.0.0-2557.jar
错误堆栈:

java.lang.NoSuchMethodError: org.apache.spark.sql.hive.HiveContext: method <init>(Lorg/apache/spark/api/java/JavaSparkContext;)V not found
at com.cyber.app.cyberspark_app.main.Main.main(Main.java:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:577)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:174)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:197)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
java.lang.NoSuchMethodError:org.apache.spark.sql.hive.HiveContext:method(Lorg/apache/spark/api/java/JavaSparkContext;)V未找到
在com.cyber.app.cyberspark_app.main.main(main.java:163)上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:577)
位于org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:174)
位于org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:197)
位于org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112)
位于org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我的pom.xml如下所示:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>path.to.my.main.Main</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency> <!-- Spark dependency -->
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>1.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>1.6.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

maven汇编插件
path.to.my.main.main
带有依赖项的jar
组装
包裹
单一的
朱尼特
朱尼特
3.8.1
测试
org.apache.spark
spark-core_2.11
1.3.1
org.apache.spark
spark-sql_2.11
1.6.1
org.apache.spark
spark-hive_2.11
1.6.1
假如
我正在使用“mvn包”来打包我的jar

编辑:

  • 我试着把所有的版本都改成1.3.1。如果我做了这个改变,我 需要更改我的应用程序,因为我正在使用 在1.3.1之后提供

  • 但是如果我把所有1.6.1都放在 Scala_2.10,我得到了同样的错误

  • 如果我需要提供任何其他信息,请告诉我。任何帮助都将不胜感激


    谢谢。

    这可能是二进制兼容性问题

    首先,确保所有Spark依赖项都在Spark 1.3.1上。我看到您必须在1.6.1上使用Spark SQL

    其次,您正在使用Scala 2.11上编译的Spark。火花的典型分布仅在2.10中编制。通常,如果您想要2.11版本,您需要自己编译spark


    如果您不确定集群上运行的Spark是否使用Scala编译,我会将所有依赖项更改为使用“2.10”而不是“2.11”,然后重试

    实际上,我以前是使用Scala 2.10上编译的Spark构建所有依赖项的。然后我尝试更改版本,看看是否找到了兼容的版本。但是,它对Scala 2.10上编译的Spark也不起作用。还有其他建议吗?我更新了答案,让我知道这是否适用于您。如果我对Spark 1.3.1进行了更改,那么我在应用程序中会遇到问题,因为我一直在使用Spark 1.3.1之后的Spark功能。我也在我的问题上添加了编辑部分。好的,我现在看到问题了。不幸的是,你不能这样做。您需要编译与正在运行的实例相同的版本。其他任何事情都会导致类似于您的问题。你最好的办法是推动你的工程团队升级Spark。我们所有的Hadoop服务都与Hortonworks捆绑在一起,我们的HDP2.3只支持1.3.1 max(或者1.4.1,我需要和我们的IT工程师谈谈)。对于这两个旧版本,我将无法利用我一直使用的所有功能,因此似乎我们需要将整个HDP捆绑包升级到最新版本。谢谢@marios的帮助。非常感谢您的帮助。:-)