intellij-idea 使用intellij在本地运行spark程序

idv4meu8  于 2022-11-01  发布在  Spark
关注(0)|答案(4)|浏览(316)

我尝试在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>

当我单击Run按钮时,它抛出一个异常:

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中运行本地Spark应用程序的帮助吗?
更新:我可以用spark-submit运行这个代码。我希望直接用运行按钮运行它在IDEA。

ztmd8pv5

ztmd8pv51#

您是否正在使用cloudera沙盒并运行此应用程序,因为在POM.xml中,我可以看到CDH依赖项'2.6.0-mr 1-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/

vsmadaxz

vsmadaxz2#

以下是我在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中被称为“提供的”依赖项,它们的版本必须与spark_dir中安装的Spark之一匹配。

vatpfxk5

vatpfxk53#

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

  • 将项目的Intellij Module Settings中的相关依赖项从provided更改为compile。您可以只更改其中的一部分,但必须尝试更改。更残酷的解决方案是更改所有依赖项。
  • 如果您在此步骤之后有进一步的例外,例如某些相依性“太旧”,请在模块设定中变更相关相依性的顺序。
qpgpyjmq

qpgpyjmq4#

我也遇到了这个问题,我的代码中也有一个旧的cloudera hadoop参考。(你必须点击原始发帖者链接中的“编辑”链接才能看到他最初的pom设置)。
我可以保留这个引用,只要我把它放在 * 我的依赖项的顶部 *(顺序很重要!)。

<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版本中,您可以选中 Include dependiencies with“Provided”Scope,这是一种保持pom作用域干净的简单方法。

相关问题