Режим 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 и контрольной точкой на нескольких ведомых?