运行第一个SparkKPI程序

1.复制一个examples中SparkPi.scala到IntelliJ IDEA编辑器,运行,出现错误:

“org.apache.spark.SparkException: A master URL must be set in your configuration”

部署程序时需要指定master的位置,参考链接知乎解答
Spark在那里指定master URL的问题:
  1)通过spark shell,执行后进入交互界面

MASTER=spark://IP:PORT ./bin/spark-shell

   2)程序内指定(可以通过参数传入)

val conf = new SparkConf().setMaster(...)
val sc = new SparkContext(conf)

传递给spark的master url可以有如下几种:

local 本地单线程
local[K] 本地多线程(指定K个内核)
local[*] 本地多线程(指定所有可用内核)
spark://HOST:PORT 连接到指定的 Spark standalone cluster master,需要指定端口。
mesos://HOST:PORT 连接到指定的 Mesos 集群,需要指定端口。
yarn-client客户端模式 连接到 YARN 集群。需要配置 HADOOP_CONF_DIR。
yarn-cluster集群模式 连接到 YARN 集群 。需要配置 HADOOP_CONF_DIR。
spark1.0起的版本在提交程序到集群有很大的不同,需要注意。

最终解决代码:

var conf=new SparkConf().setAppName("Spark Pi").setMaster("local");

2. 通过如上修改,运行程序,继续报错

Exception in thread "main" java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty() Lscala/collection/immutable/HashSet;

原因是spark版本和Scala不一致。
引用官网文章上一段:“Spark runs on Java 7+, Python 2.6+ and R 3.1+. For the Scala API, Spark 1.6.1 uses Scala 2.10. You will need to use a compatible Scala version (2.10.x).”

我的是spark1.6.1,Scala2.11.8,所以不行。。很不巧的是我换了Spark-2.10.6和Spark-2.10.4还是出现原来的错误,后来才在博客中看到一句话,说“启动spark-shell 启动的的时候,info 信息表示用的scala-2.10.4 版本”,所以我启动spark-shell时一行一行看弹出提示,发现就在“SPARK”图标下,有一句“Using Scala version 2.10.5(Java HotSpot(TM) 64-bit Server VM, Java 1.8.0_77)”,所以我换了一下。

另外,相当重要的是在IDE环境中加载的Scala语言包也要更新啊~~我就是忘了重新加载Scala SDK导致的。

我只会用笨方法—一切重新开始。删除所有IDEA相关文件,重新解压,这时候用命令“idea”启动发现原来的Plugins还在,然后configure->plugins->选择Scala->uninstall->restart->重新进入->install Scala plugin->创建工程->创建工程->选择scala-2.10.5版本。

原文地址:https://www.cnblogs.com/yiruparadise/p/5502877.html