Spark EC2 SSH ошибка соединения SSH код возврата 255
Каждый раз, когда я пытаюсь запустить кластер Spark на AWS через файл Spark ec2/spark_ec2.py, я получаю сообщение об ошибке подключения SSH, которое в конечном итоге разрешается, но тратит много времени.
Прежде чем вы отметите это как дубликат, я знаю, что было задано довольно много похожих вопросов, но есть два ключевых различия: а) мое соединение всегда завершается (в конце концов), и я получаю здоровый кластер Spark и б) "ответы" остальные вопросы обычно касаются предыдущих версий Spark (например, 1.2, 1.3 и т. д.). Я всегда сталкивался с этой проблемой, возвращаясь 12 месяцев назад с 1.3 по сегодняшний день с 1.6.1.
Заранее спасибо!
Терминальный выход:
Launched master in us-east-1e, regid = r-a1b2c3d4
Waiting for AWS to propagate instance metadata...
Waiting for cluster to enter 'ssh-ready' state...........
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Warning: SSH connection error. (This could be temporary.)
Host: ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
SSH return code: 255
SSH output: ssh: connect to host ec2-xx-xx-xx-xxx.compute-1.amazonaws.com port 22: Connection refused
.
Cluster is now in 'ssh-ready' state. Waited 833 seconds.
Generating cluster's SSH key on master...
4 ответа
Скрипты spark-ec2 создают AMI на основе базового AMI Amazon Linux:
# Creates an AMI for the Spark EC2 scripts starting with a stock Amazon
# Linux AMI.
# This has only been tested with Amazon Linux AMI 2014.03.2
Поэтому я считаю, что задержка в соединении SSH / медленном запуске происходит из-за того, что экземпляр EC2 применяет (или пытается, а также в зависимости от конфигурации VPC) критические исправления / обновления безопасности при создании, как подробно описано в FAQ по Amazon Linux AMI:
При первой загрузке Amazon Linux AMI устанавливает из репозиториев пакетов любые обновления безопасности пользовательского пространства, которые оценены как критические или важные, и делает это до запуска таких служб, как SSH.
Если AMI не может получить доступ к репозиториям yum, он отключится и попытается несколько раз, прежде чем завершить процедуру загрузки. Возможные причины этого - ограниченные настройки брандмауэра или настройки VPC, которые препятствуют доступу к хранилищам пакетов Amazon Linux AMI.
Если это действительно так, то создание собственного AMI из виртуальной машины, к которой применены все соответствующие обновления, и вызов сценария с параметром --ami должны решить проблему (это может быть автоматизировано, чтобы быть в курсе всего).
Потенциально можно сначала проверить это, отключив процесс обновления безопасности, как показано в FAQ:
Чтобы отключить обновление безопасности при загрузке из консоли AWS EC2:
На странице "Дополнительные параметры экземпляра" в мастере запроса экземпляров есть текстовое поле для отправки пользовательских данных Amazon Linux AMI. Эти данные могут быть введены в виде текста или загружены в виде файла. В любом случае данные должны быть:
#cloud-config repo_upgrade: none
Чтобы отключить обновление безопасности при загрузке из командной строки:
Создайте текстовый файл с предыдущими пользовательскими данными и передайте его экземплярам запуска aws ec2 с
--user-data file://<filename>
флаг (это также можно сделать сec2-run-instances -f
).Чтобы отключить обновление безопасности при загрузке при повторном заполнении Amazon Linux AMI:
изменять
/etc/cloud/cloud.cfg
и изменитьrepo_upgrade: security
вrepo_upgrade: none
,
Пожалуйста, подтвердите, что имя пары ключей на клиенте и на машине назначения совпадает.
На клиенте это, вероятно, хранится в ~/.ssh в файле pem. На хосте назначения его можно увидеть в консоли EC2 (щелкните экземпляр, следующая вкладка "Описание").
Другой способ проверить это: запустить новый экземпляр EC2 с той же парой ключей и войти, используя соответствующий файл pem.
Имейте в виду также группы безопасности.
Пожалуйста, проверьте, если ваша группа безопасности в EC2 имеет открытый порт ssh (22).