Подключение искровых кластеров

avatar
eason
8 апреля 2018 в 11:04
36
1
0

Подключение искровых кластеров следующим образом: spark://master:7707, но вместо отправки задач способом spark-submit вместо прямого запуска метода main выполняется ли это на искровом кластере?

object SparkPi {    
  def main(args: Array[String]) {    
    val conf = new SparkConf()
                  .setAppName("Spark Pi")
                  .setMaster("spark://master:7707")

    val spark = new SparkContext(conf)    
    val slices = if (args.length > 0) args(0).toInt else 2    
    val n = 100000 * slices    
    val count = spark.parallelize(1 to 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()    
  }    
}
Источник

Ответы (1)

avatar
ernest_k
8 апреля 2018 в 11:14
0

При непосредственном выполнении этого приложения с помощью команды java созданный процесс будет запускать драйвер Spark в режиме клиента.

Чтобы это запустилось в кластере, вам нужно будет использовать spark-submit.

Обратите внимание, что на машине, выполняющей этот основной метод, будет работать только драйвер. Задания будут выполняться в кластере рабочих процессов, и там будут выполняться вычисления (если только ваш мастер не установлен на local, что не соответствует вашему примеру кода)

eason
8 апреля 2018 в 13:13
0

То есть, даже если я укажу new SparkConf().SetMaster("spark://master:7707") в коде, а не в виде spark-submit, то программа запускается локально, а не на кластере, Это?

ernest_k
8 апреля 2018 в 13:53
0

@eason Да, драйвер работает локально, но задания выполняются в кластере. С удаленным главным адресом это похоже на отправку в режиме клиента.

eason
9 апреля 2018 в 02:12
0

думаю попробую