Отправляя задания на 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