Искра: проверьте свой пользовательский интерфейс кластера, чтобы убедиться, что работники зарегистрированы

У меня есть простая программа в Spark:

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val conf = new SparkConf().setMaster("spark://10.250.7.117:7077").setAppName("Simple Application").set("spark.cores.max","2")
    val sc = new SparkContext(conf)    
    val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv")

    //first get the first 10 records 
    println("Getting the first 10 records: ")
    ratingsFile.take(10)    

    //get the number of records in the movie ratings file
    println("The number of records in the movie list are : ")
    ratingsFile.count() 
  }
}

Когда я пытаюсь запустить эту программу из spark-shell, т.е. я вхожу в узел имени (установка Cloudera) и последовательно запускаю команды на spark-shell:

val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv")
println("Getting the first 10 records: ")
ratingsFile.take(10)    
println("The number of records in the movie list are : ")
ratingsFile.count() 

Я получаю правильные результаты, но если я пытаюсь запустить программу из затмения, никакие ресурсы не назначаются программе, и в журнале консоли все, что я вижу, это:

WARN TaskSchedulerImpl: начальное задание не приняло никаких ресурсов; проверьте свой кластерный интерфейс, чтобы убедиться, что работники зарегистрированы и имеют достаточные ресурсы

Кроме того, в интерфейсе Spark я вижу это:

Работа продолжает работать - искра

Кроме того, следует отметить, что эта версия spark была установлена с Cloudera (следовательно, рабочие узлы не отображаются).

Что я должен сделать, чтобы сделать эту работу?

РЕДАКТИРОВАТЬ:

Я проверил HistoryServer, и эти задания там не отображаются (даже в неполных приложениях)

Ответ 1

Я выполнил настройку и настройку производительности для многих искровых кластеров, и это очень распространенное/нормальное сообщение, чтобы увидеть, когда вы сначала планируете/настраиваете кластер для обработки ваших рабочих нагрузок.

Это однозначно из-за нехватки ресурсов для запуска этой работы. Задание запрашивает одно из:

  • больше памяти на одного работника, чем выделено ему (1 ГБ)
  • больше CPU, чем доступно в кластере

Ответ 2

Наконец, выяснилось, что такое ответ.

При развертывании искровой программы в кластере YARN главный URL-адрес - это просто пряжа.

Итак, в программе контекст искры должен выглядеть следующим образом:

val conf = new SparkConf().setAppName("SimpleApp")

Затем этот проект затмения должен быть построен с использованием Maven, и сгенерированная банка должна быть развернута в кластере, скопировав его в кластер и затем выполнив следующую команду

spark-submit --master yarn --class "SimpleApp" Recommender_2-0.0.1-SNAPSHOT.jar

Это означает, что работа с eclipse напрямую не будет работать.

Ответ 3

Вы можете проверить работу кластера node: ваше приложение не может превышать его. Например, у вас есть две работы node. И за работу node у вас есть 4 ядра. Затем у вас есть 2 приложения для запуска. Таким образом, вы можете предоставить каждому приложению 4 ядра для выполнения задания.

Вы можете установить такой код в коде:

SparkConf sparkConf = new SparkConf().setAppName("JianSheJieDuan")
                          .set("spark.cores.max", "4");

Это работает для меня.

Ответ 4

Есть также некоторые причины этого же сообщения об ошибке, кроме тех, которые размещены здесь.

Для spark-on-mesos кластера, убедитесь, что у вас есть java8 или более новая версия Java версии на mesos slaves.

Для spark standalone убедитесь, что у вас есть java8 (или новее) на workers.

Ответ 5

У вас нет рабочих для выполнения задания. Для выполнения задания нет доступных ядер, и причина в том, что состояние задания все еще находится в состоянии "Ожидание".

Если у вас нет рабочих, зарегистрированных в Cloudera, как будут выполняться задания?