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

时间:2015-01-17 17:54:48

标签: amazon-web-services amazon-ec2 apache-spark apache-spark-1.2

我正在尝试使用预先打包的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脚本中的问题。直到最近我才从未遇到过这个问题。

4 个答案:

答案 0 :(得分:4)

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主机的所有行,例如:
  2. ec2-54-154-27-180.eu-west-1.compute.amazonaws.com,54.154.27.180 ssh-rsa (...)

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

答案 1 :(得分:2)

我遇到了同样的问题,我按照线程中提到的所有步骤进行了操作(主要是将-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).

答案 2 :(得分:1)

我刚遇到同样的情况。我在def is_ssh_available()进入python脚本并将其转储出返回代码和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进行了另一次尝试,运行成功完成。

答案 3 :(得分:1)

我使用绝对(非相对)路径访问我的身份档案(灵感来自Peter Zybrick)并完成了Grzegorz Dubicki建议的所有事情。谢谢。