Режим Spark для потокового кластера в Мезосе: java.lang.RuntimeException: потоковая банка не найдена

Цель:

Запуск приложений потокового воспроизведения в режиме кластера на мезо, используя hdfs и контрольные точки.

Кластер:

  • Мезос кластер с 3 рабами.
  • Один диспетчер подключается к кластеру.
  • Один внешний hdfs и все двоичные файлы установлены на каждом ведомом устройстве.

Версии: Mesos 1.2.0 spark 2.0.1 hdfs 2.7

Источники приложений : application.jar, контрольные точки и двоичные файлы искры, хранящиеся в формате hdf.

Контекст:

Запуск приложения с такой конфигурацией:

  • "SPARK_EXECUTOR_URI": "hdfs: // hdfsHost /spark.tgz
  • "spark.submit.deployMode": "кластер"
  • "spark.master": "spark: // dispatcherHost "
  • "spark.mesos.coarse": "правда"
  • mainClass: "enterprise.com.Class"
  • jar: "hdfs: // hdfsHost /application.jar"

Первый запуск (нет данных о контрольных точках): работает

  • Один драйвер запускается с новым идентификатором платформы mesos с именем приложения.
  • Одна задача (или несколько) выполняется на другом или том же ведомом устройстве.
  • контрольная точка была правильно создана в hdfs.

Второй запуск (с данными контрольной точки): не работает

  • Один драйвер запускается с новым идентификатором платформы mesos с именем приложения.
  • Одна задача (или несколько) выполняется на другом или том же ведомом устройстве.
  • Если драйвер не запускается на той же подчиненной машине, что и сохраненный chekpoint, мы получаем следующее исключение:

Сообщение об ошибке:

java.lang.RuntimeException: Stream '/jars/application.jar' was not found.
at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:222)
...

Эта ошибка возникает из-за того, что драйвер, который отвечает за предоставление файла jar исполнителям, пытается открыть его из пути jar, сохраненного контрольной точкой (загруженного из hdfs и сохраненного в mesos workdir path = sandbox), который не существует в текущий узел

Downloading resource with Hadoop client from 'hdfs://*hdfsHost*/application.jar' to '/var/lib/mesos/slaves/<ID>/frameworks/<frameworkID>/executors/<driverID>/runs/<runID>/application.jar'
...
INFO SparkContext: Added JAR file:/var/lib/mesos/slaves/<checkpointedID>/frameworks/<checkpointedFrameworkID>/executors/<checkpointedDriverID>/runs/<runID>/spark/../application.jar at spark://<driverHost>/jars/application.jar with timestamp 1498051933921

Я смущен поведением.

Вопрос

  • A) Почему spark использует интерфейс rpc для предоставления jar приложения исполнителям при использовании hdfs вместо того, чтобы исполнители загружались напрямую из исходного кода?
  • Б) Почему контрольные точки хранят путь к структуре мезо приложения и пытаются его восстановить?
  • C) Как решить эту проблему и запустить потоковое приложение на мезо с hdfs и контрольной точкой на нескольких ведомых?

0 ответов

Другие вопросы по тегам