2017-07-17 20 views
0

我试图在IntelliJ IDEA的运行一个简单的测试代码。这里是我的代码:运行星火计划与当地的IntelliJ

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中运行本地Spark应用程序吗?谢谢。

更新:我可以运行此代码火花提交。我希望直接运行IDEA中的运行按钮。

+0

尝试删除明确的Hadoop依赖关系并依赖Spark的传递依赖关系。 (Spark引入了hadoop-client,它引入了hadoop-hdfs等)。你的问题可能在于你声明的cloudera依赖,这可能是不兼容的,因为它依赖于古老的MR1。你真的需要这种依赖吗? –

+0

@RickMoritz我不一定需要那个dep。我只是删除所有hadoop deps,但没有工作。 –

+0

有同样的错误? –

回答

0

您使用Cloudera的沙箱和运行此应用程序,因为在pom.xml中我可以看到CDH依赖“2.6.0-MR1-cdh5.5.0”。

如果您正在使用的Cloudera请使用下面的依赖于你的火花斯卡拉项目因为“火花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> 

我用下面的参考来运行我的火花应用程序。

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

+0

我没有使用任何沙箱。其实我只想在本地运行这个应用程序总数。我参考了链接并测试了我的代码与spark-submit一起工作,但不在IDEA中运行。这是否意味着我不能在IDEA中做到这一点? –

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> 

火花核心和火花SQL罐子在我build.sbt称为“提供“依赖关系及其版本必须与spark_dir中安装的Spark中的一个匹配。我现在用hadoop-aws jar版本2.7.2来使用Spark 2.0.2。

0

这可能是后期的答复,但我有同样的问题。你可以用spark-submit来运行,可能你已经有了相关的依赖关系。我的解决办法是:

  • 变化Intellij Module Settings相关的依赖关系为您的项目从providedcompile。你只能改变其中的一部分,但你必须尝试。残酷的解决办法是改变一切。

  • 如果您有进一步的异常此步骤后,如一些依赖是“太老”,在模块设置中更改相关的依赖性的顺序。