【问题标题】:Correct Maven Dependency for Spark APISpark API 的正确 Maven 依赖关系
【发布时间】:2017-07-21 00:10:40
【问题描述】:

我想知道以下依赖声明是否不足以访问以下类

org.apache.spark.api.java.function.PairFunction

运行时出错

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/PairFunction
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.api.java.function.PairFunction
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

声明的依赖项

  <dependencies>
  <dependency>
     <groupId>org.scala-lang</groupId>
     <artifactId>scala-library</artifactId>
     <version>2.12.1</version>
   </dependency>
   <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>2.1.0</version>
</dependency>
   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

我正在像这样运行 .jar:

hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar   ~/projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt

谢谢

【问题讨论】:

  • 您是否使用这些类进行测试?
  • 不具体。当我通过 mvn package 构建时,我有运行并通过的单元测试

标签: java maven apache-spark jar


【解决方案1】:

对于您的 spark 版本,scala 版本不行。我有以下属性,它可以工作

<properties>
        <scala.tools.version>2.10</scala.tools.version>
        <scala.version>2.10.4</scala.version>
        <spark.version>1.6.1</spark.version>
    </properties>

至少需要 scala 2.10,至于 spark-core_2.10 声明你的 spark 核心依赖项(看看这里spark

【讨论】:

  • 更改 Scala 版本并没有解决问题。还是谢谢
【解决方案2】:

接口 PairFunction 位于 spark-core 中,因此您声明的依赖关系很好。

https://github.com/apache/spark/blob/master/core/src/main/java/org/apache/spark/api/java/function/PairFunction.java

问题是运行时在类路径中找不到 spark-core。

根据您的设置,可以通过多种方式解决问题,但在您的情况下,最简单的方法可能是使用 hadoop 命令的 -libjars 选项传递 jar。

试试类似的东西

hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar ~/projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt -libjars path/to/spark-core.jar

让我知道结果。

【讨论】:

  • 同样的结果。太奇怪了... hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar AppDriver ~/projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt -libjars ~/.m2/repository/com /sparkjava/spark-core/2.5/spark-core-2.5.jar
  • 您传递的 jar 是(不幸的是)spark java web 框架,apache spark,即计算平台 jar 路径应该类似于 /repository/org/apache/...
  • 还是同样的问题...hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar AppDriver ~/projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt - libjars ~/.m2/repository/org/apache/spark/spark-core_2.11.jar 线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/PairFunction
  • 我知道这已经很久了,但是在命令中你指定 spark-core_2.11.jar 但在你的 pom 中你指定 spark-core_2.10。我建议将 pom 版本更改为 2_11。另外,您确定您提供的路径是正确的吗?路径对我来说似乎非常短(例如没有 spark 版本),我希望路径是“~/.m2/repository/org/apache/spark/spark-core_2.11/2.1.0/spark-core_2. 11-2.1.0.jar"
【解决方案3】:

我们在这里有两个选项,执行 spark-submit 并将命令中的依赖 jars 指定为 -jars。或者建立一个胖罐并提交火花。构建 fat jar 将解决依赖问题。

例如。 spark-submit --master local -- class your_class jarfile_path --jars dependency_jars input_arguements

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多