Отправляя задания на Spark EC2-кластер удаленно

Я установил кластер EC2 с помощью Spark. Все работает, все ведущие/ведомые работают и работают.

Я пытаюсь отправить образец задания (SparkPi). Когда я ssh кластер и отправлю его оттуда - все работает нормально. Однако, когда драйвер создается на удаленном хосте (мой ноутбук), он не работает. Я пробовал оба режима для --deploy-mode:

--deploy-mode=client:

Из моего ноутбука:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar

Результаты следующих неопределенных предупреждений/ошибок:

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

ОШИБКА SparkDeploySchedulerBackend: попросил удалить несуществующего исполнителя 0 15/02/22 18:30:45

ОШИБКА SparkDeploySchedulerBackend: предлагается удалить несуществующий исполнитель 1

... и неудачные драйверы - в интерфейсе Spark Web "Завершены драйверы" с "State = ERROR".

Я попытался передать ограничения для ядер и памяти, чтобы отправить script, но это не помогло...

--deploy-mode=cluster:

Из моего ноутбука:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --deploy-mode cluster --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar

Результат:

.... Драйвер успешно представлен как драйвер-20150223023734-0007... ожидание перед началом опроса для состояния драйвера... мастер опроса для Состояние драйвера Состояние драйвера-20150223023734-0007 - Исключение ERROR из кластера было: java.io.FileNotFoundException: Файл Файл:/Главная/олег/искра/spark12/ec2test/цель/ scala -2,10/ec2test_2.10-0.0.1.jar не существует. java.io.FileNotFoundException: Файл Файл:/Главная/олег/искра/spark12/ec2test/цель/scala -2,10/ec2test_2.10-0.0.1.jar не существует. в org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:397)   в org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:251)   на org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:329) в org.apache.spark.deploy.worker.DriverRunner.org $апаша $искровым $$ развернуть рабочий $DriverRunner $$ downloadUserJar (DriverRunner.scala: 150)   в org.apache.spark.deploy.worker.DriverRunner $$ Анон $1.run(DriverRunner.scala: 75)

Итак, я был бы признателен за любые указатели на то, что происходит не так, и на некоторые рекомендации по развертыванию заданий с удаленного клиента. Спасибо.

UPDATE: Поэтому для второй проблемы в режиме кластера файл должен быть глобально видимым для каждого кластера node, поэтому он должен находиться где-то в доступном месте. Это решение IOException, но приводит к той же проблеме, что и в клиентском режиме.

Ответ 1

Документация по адресу:

http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security

перечислены все различные каналы связи, используемые в Spark-кластере. Как вы можете видеть, есть куча, где соединение выполняется от Исполнителя (-ов) к Драйверу. Когда вы запускаете с --deploy-mode=client, драйвер запускается на вашем ноутбуке, поэтому исполнители попытаются подключиться к вашему ноутбуку. Если группа безопасности AWS, которую ваши исполнители запускают под блоком исходящего трафика на ваш ноутбук (который нет в группе безопасности по умолчанию, созданной сценариями Spark EC2), или вы находитесь за маршрутизатором/брандмауэром (скорее всего), они не могут подключиться и вы получаете ошибки, которые видите.

Чтобы решить эту проблему, вам необходимо переслать все необходимые порты на ваш ноутбук или перенастроить брандмауэр, чтобы разрешить подключение к портам. Видя, что куча портов выбрана произвольно, это означает, что вы можете открыть широкий диапазон, если не всех портов. Вероятно, использование --deploy-mode=cluster или client из кластера менее болезненно.

Ответ 2

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

Альтернатива:

1) Livy - теперь проект Apache! http://livy.io или http://livy.incubator.apache.org/

2) Сервер Spark Job - https://github.com/spark-jobserver/spark-jobserver