TaskSchedulerImpl:初始作业未接受任何资源。 (Spark错误)

时间:2015-02-09 15:13:59

标签: scala apache-spark

我正在尝试在独立模式群集上运行SparkPi示例。

package org.apache.spark.examples
import scala.math.random
import org.apache.spark._

/** Computes an approximation to pi */
object SparkPi {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("SparkPi")
      .setMaster("spark://192.168.17.129:7077")
      .set("spark.driver.allowMultipleContexts", "true")
    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()
    }
}

注意:我在这一行做了一点改动:

val conf = new SparkConf().setAppName("SparkPi")
  .setMaster("spark://192.168.17.129:7077")
  .set("spark.driver.allowMultipleContexts", "true")

问题:我正在使用spark-shell(Scala接口)来运行此代码。当我尝试这段代码时,我反复收到这个错误:

15/02/09 06:39:23 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

注意:我可以在主人的WebUI中看到我的工作人员,也可以在正在运行的应用程序部分看到新工作。但是这个应用程序没有尽头,我反复看到错误。

有什么问题?

由于

1 个答案:

答案 0 :(得分:1)

如果你想从spark shell运行它,那么用参数--master spark://192.168.17.129:7077启动shell并输入以下代码:

import scala.math.random
import org.apache.spark._
val slices = 10
val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
val count = sc.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)

否则,将代码编译到jar中并使用spark-submit运行它。但是从代码中删除setMaster并将其添加为spark-submit脚本的“master”参数。还要从代码中删除allowMultipleContexts参数。

你只需要一个火花环境。