我正在尝试在Netbeans中运行SparkPi.scala示例程序。不幸的是,我对Spark很新,并且无法成功执行它。
我的偏好是仅在Netbeans中工作并从那里执行。我知道火花也允许从火花控制台执行 - 但我不喜欢采取这种方法。
这是我的build.sbt文件内容:
name := "SBTScalaSparkPi"
version := "1.0"
scalaVersion := "2.10.6"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1"
这是我的plugins.sbt文件内容:
logLevel := Level.Warn
这是我试图执行的程序:
import scala.math.random
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
/** Computes an approximation to pi */
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
val count = spark.parallelize(1 until n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
}
}
JDK版本:1.8。
尝试执行代码时得到的错误如下:
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
16/03/25 07:50:25 INFO SparkContext: Running Spark version 1.6.1
16/03/25 07:50:26 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/03/25 07:50:26 ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
at SparkPi.main(SparkPi.scala)
16/03/25 07:50:26 INFO SparkContext: Successfully stopped SparkContext
Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>
at SparkPi$.main(SparkPi.scala:28)
at SparkPi.main(SparkPi.scala)
Process finished with exit code 1
提前感谢您的帮助。
答案 0 :(得分:8)
必须在配置中设置主URL
您必须在SparkConf中设置spark.master
。您必须设置两个必需参数 - 您已设置的主控和AppName。有关详细信息,请参阅文档中的Initializing Spark section。
您应该使用哪位大师?有关所有选项,请参阅Master URLs部分。最简单的测试选项是local
,它在本地计算机上运行整个Spark系统(驱动程序,主服务器,工作程序),无需额外配置。
通过Scala API设置主服务器:
val conf = new SparkConf().setAppName("Spark Pi").setMaster("local")
val spark = new SparkContext(conf)
答案 1 :(得分:1)
程序的开头只缺少指向Spark主端点的URL。您可以在InteliJ中将其指定为命令行参数。主URL是运行群集的Spark主服务器的URL和端口。示例命令行参数如下所示:
-Dspark.master=spark://myhost:7077
有关详细信息,请参阅此问题的答案: How to set Master address for Spark examples from command line
也许对于您的第一次运行,您只想启动本地Spark独立环境。如何运行如下所示:http://spark.apache.org/docs/latest/spark-standalone.html
如果你运行了这个,你可以设置你的spark master配置:
-Dspark.master=spark://localhost:7077
答案 2 :(得分:0)
需要设置主网址。使用setMaster(“local”)函数/方法解决了这个问题。
var compose = function(data) {
let mix = {};
Object.keys(data).map(function(key) {
mix[key] = Object.assign({},
config
);
mix[key].king.map(function(val, index) {
mix[key].king[index].val = data[key][index]; // config will be changed here :(
});
});
return mix;
};
答案 3 :(得分:0)
事实上,@ Matthias和@Tzach都是对的。您应该根据对您来说更容易的方式选择您的解决方案(现在可能更喜欢第一个选项)。一旦开始在真实集群上运行spark作业,最好不对“master”参数进行硬编码,以便可以在多个集群模式下运行spark作业(YARN,Mesos,Standalone with spark-submit)并继续使用Netbeans(-Dspark.master = local [*])
在本地运行