使用intellij在本地运行spark程序

时间:2017-07-17 09:42:46

标签: apache-spark intellij-idea

我试图在intellij IDEA中运行一个简单的测试代码。这是我的代码:

import org.apache.spark.sql.functions._
import org.apache.spark.{SparkConf}
import org.apache.spark.sql.{DataFrame, SparkSession}

object hbasetest {

  val spconf = new SparkConf()
  val spark = SparkSession.builder().master("local").config(spconf).getOrCreate()
  import  spark.implicits._

  def main(args : Array[String]) {
    val df = spark.read.parquet("file:///Users/cy/Documents/temp")
    df.show()
    spark.close()
  }
}

我的依赖列表:

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.0</version>
<!--<scope>provided</scope>-->
</dependency>

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.11</artifactId>
  <version>2.1.0</version>
  <!--<scope>provided</scope>-->
</dependency>

当我点击运行按钮时,它会抛出异常:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.TaskID.<init>(Lorg/apache/hadoop/mapreduce/JobID;Lorg/apache/hadoop/mapreduce/TaskType;I)V

我检查了这个post,但在修改后情况没有改变。我可以在IDEA中运行本地火花应用程序获得一些帮助吗? THx中。

更新:我可以使用spark-submit运行此代码。我希望在IDEA中使用运行按钮直接运行它。

4 个答案:

答案 0 :(得分:0)

您是否正在使用cloudera沙箱并运行此应用程序,因为在POM.xml中我可以看到CDH依赖项'2.6.0-mr1-cdh5.5.0'。

如果您正在使用cloudera,请使用以下依赖项为您的spark scala项目,因为'spark-core_2.10'工件版本已更改。

<dependencies>
  <dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.10.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.0.0-cdh5.1.0</version>
  </dependency>
</dependencies>

我使用以下参考来运行我的spark应用程序。

参考:http://blog.cloudera.com/blog/2014/04/how-to-run-a-simple-apache-spark-app-in-cdh-5/

答案 1 :(得分:0)

以下是我在IntelliJ中用于运行/调试配置的设置:

*Main class:*
org.apache.spark.deploy.SparkSubmit

*VM Options:*
-cp <spark_dir>/conf/:<spark_dir>/jars/* -Xmx6g

*Program arguments:*
--master
local[*]
--conf
spark.driver.memory=6G
--class
com.company.MyAppMainClass
--num-executors
8
--executor-memory
6G
<project_dir>/target/scala-2.11/my-spark-app.jar
<my_spark_app_args_if_any>

spark-core和spark-sql jar在我的build.sbt中引用为&#34;提供&#34;依赖项及其版本必须与spark_dir中安装的Spark之一匹配。我目前使用的是带有hadoop-aws jar版本2.7.2的Spark 2.0.2。

答案 2 :(得分:0)

回复可能会迟到,但我遇到了同样的问题。您可以使用spark-submit运行,可能您已经有相关的依赖项。我的解决方案是:

  • 将项目的Intellij Module Settings中的相关依赖项从provided更改为compile。你可能只改变其中的一部分,但你必须尝试。残酷的解决方案是改变一切。

  • 如果在此步骤之后还有其他异常,例如某些依赖项已经过了旧的&#34;,请更改模块设置中相关依赖项的顺序。

答案 3 :(得分:0)

我也遇到了这个问题,我的代码中也有一个旧的cloudera hadoop参考。 (您必须单击原始海报链接中的“编辑”链接,以查看其原始pom设置。)

只要将其放在依赖项的顶部中,我就可以保留该引用(顺序很重要!)。您应该将其与自己的hadoop集群设置进行匹配。

<dependency>
  <!-- THIS IS REQUIRED FOR LOCAL RUNNING IN INTELLIJ -->
  <!-- IT MUST REMAIN AT TOP OF DEPENDENCY LIST TO 'WIN' AGAINST OLD HADOOP CODE BROUGHT IN-->
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-mapreduce-client-core</artifactId>
  <version>2.6.0-cdh5.12.0</version>
  <scope>provided</scope>
</dependency>

请注意,在Intellij的2018.1版本中,您可以选中包含具有“提供的”范围的依赖项,这是保持pom范围干净的简单方法。