在IntelliJ Idea中运行Apache Spark示例应用程序

时间:2016-03-25 06:14:53

标签: scala hadoop apache-spark

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

提前感谢您的帮助。

4 个答案:

答案 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 [*])

在本地运行