Искра: проверьте свой пользовательский интерфейс кластера, чтобы убедиться, что работники зарегистрированы
У меня есть простая программа в 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, как будут выполняться задания?