使用 Spark 1.2.0 EC2 启动脚本,集群在 'ssh-ready' 状态下挂起

Cluster hangs in 'ssh-ready' state using Spark 1.2.0 EC2 launch script

我正在尝试使用其预打包的 EC2 脚本启动一个独立的 Spark 集群,但它只是无限期地挂起在 'ssh-ready' 状态:

ubuntu@machine:~/spark-1.2.0-bin-hadoop2.4$ ./ec2/spark-ec2 -k <key-pair> -i <identity-file>.pem -r us-west-2 -s 3 launch test
Setting up security groups...
Searching for existing cluster test...
Spark AMI: ami-ae6e0d9e
Launching instances...
Launched 3 slaves in us-west-2c, regid = r-b_______6
Launched master in us-west-2c, regid = r-0______0
Waiting for all instances in cluster to enter 'ssh-ready' state..........

然而我可以毫无怨言地通过 SSH 进入这些实例:

ubuntu@machine:~$ ssh -i <identity-file>.pem root@master-ip
Last login: Day MMM DD HH:mm:ss 20YY from c-AA-BBB-CCCC-DDD.eee1.ff.provider.net

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2013.03-release-notes/
There are 59 security update(s) out of 257 total update(s) available
Run "sudo yum update" to apply all updates.
Amazon Linux version 2014.09 is available.
root@ip-internal ~]$

我想弄清楚这是 AWS 中的问题还是 Spark 脚本的问题。直到最近我才遇到过这个问题。

我只是 运行 遇到了完全相同的情况。我在 def is_ssh_available() 进入 python 脚本,并让它转出 return 代码和 cmd。

except subprocess.CalledProcessError, e:
print "CalledProcessError "
print e.returncode
print e.cmd

我将密钥文件位置设置为 ~/.pzkeys/mykey.pem - 作为实验,我将其更改为完全限定 - 即 /home/pete.zybrick/.pzkeys/mykey.pem 并且工作正常。

在那之后,我 运行 陷入另一个错误 - 我尝试使用 --user=ec2-user(我尽量避免使用 root),然后我在 rsync 上遇到权限错误,删除了 --user-ec2-user 所以它将使用 root 作为默认值,再次尝试 --resume,运行 成功完成。

Spark 1.3.0+

这个问题是fixed in Spark 1.3.0


Spark 1.2.0

您的问题是由于 conflicting entries in you SSHs known_hosts file.

导致 SSH 静默停止造成的

要解决您的问题,请将 -o UserKnownHostsFile=/dev/null 添加到您的 spark_ec2.py 脚本 like this


可选地,要清理并避免 运行 稍后使用 SSH 连接到您的集群时出现问题,我建议您:

  1. 删除 ~/.ssh/known_hosts 中包含 EC2 主机的所有行,例如:

ec2-54-154-27-180.eu-west-1.compute.amazonaws.com,54.154.27.180 ssh-rsa (...)

  1. 使用this solution完全停止检查和存储您的EC2实例的临时IP指纹

我使用了我的身份文件的绝对(非相对)路径(受 Peter Zybrick 启发)并执行了 Grzegorz Dubicki 建议的所有操作。谢谢。

我遇到了同样的问题,我按照线程中提到的所有步骤进行操作(主要是将 -o UserKnownHostsFile=/dev/null 添加到您的 spark_ec2.py 脚本中),它仍然挂起说

Waiting for all instances in cluster to enter 'ssh-ready' state

简答:

更改私钥文件的权限并重新运行spark-ec2脚本

[spar@673d356d]/tmp/spark-1.2.1-bin-hadoop2.4/ec2% chmod 0400 /tmp/mykey.pem

长答案:

为了排除故障,我修改了 spark_ec2.py 并记录了使用的 ssh 命令并尝试在命令提示符下执行它,这是对密钥的错误权限:

[spar@673d356d]/tmp/spark-1.2.1-bin-hadoop2.4/ec2% ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /tmp/mykey.pem  -o ConnectTimeout=3 uroot@52.1.208.72 
Warning: Permanently added '52.1.208.72' (RSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/tmp/mykey.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /tmp/mykey.pem
Permission denied (publickey).