5

我正在尝试使用其预打包的 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

4 回答 4

4

火花 1.3.0+

此问题已在 Spark 1.3.0 中修复


火花 1.2.0

您的问题是由于SSHsknown_hosts文件中的条目冲突而导致 SSH 静默停止引起的。

要解决您的问题,请像这样-o UserKnownHostsFile=/dev/null添加到您的spark_ec2.py脚本中。


或者,为了清理并避免以后在使用 SSH 连接到集群时遇到问题,我建议您:

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

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

  1. 使用此解决方案完全停止检查和存储您的 EC2 实例的临时 IP 的指纹
于 2015-01-20T12:09:39.360 回答
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).
于 2015-03-07T20:31:29.210 回答
1

我使用了身份文件的绝对(而非相对)路径(受 Peter Zybrick 启发),并按照 Grzegorz Dubicki 的建议进行了操作。谢谢你。

于 2015-01-23T10:40:21.927 回答
1

我刚刚遇到了同样的情况。我进入python脚本def is_ssh_available()并让它转储返回代码和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,运行成功完成。

于 2015-01-17T22:42:18.957 回答