在AWS上使用Snow(和雪花)进行R语言并行处理

7
关于我之前的类似SO问题,我尝试在AWS上使用snow/snowfall进行并行计算。
我所做的是:
  • sfInit()函数中,我提供了公共DNS到socketHosts参数,如下所示:sfInit(parallel=TRUE,socketHosts =list("ec2-00-00-00-000.compute-1.amazonaws.com"))
  • 返回的错误是Permission denied (publickey)
  • 然后我按照http://www.imbi.uni-freiburg.de/parallel/中“无密码安全Shell(SSH)登录”部分的说明操作(我认为是正确的!)
  • 我只是将我在AWS上创建的.pem文件的内容复制到我的主AWS实例和要连接的AWS实例的~/.ssh/authorized_keys中
我是否遗漏了什么?
如果用户能分享他们在AWS上使用snow的经验,我将非常感激。

非常感谢您的建议。

更新: 我想更新我找到的解决方案,以解决我的特定问题:

  • 我使用StarCluster设置了我的AWS集群:StarCluster
  • 在所有节点上安装了snowfall软件包
  • 从主节点发出以下命令
  • hostslist < - list("ec2-xxx-xx-xxx-xxx.compute-1.amazonaws.com","ec2-xx-xx-xxx-xxx.compute-1.amazonaws.com")
  • sfInit(parallel=TRUE, cpus=2, type="SOCK",socketHosts=hostslist)
  • l < - sfLapply(1:2,function(x)system("ifconfig",intern=T))
  • lapply(l,function(x)x[2])
  • sfStop()
  • IP信息证实了AWS节点正在被利用

2
我认为.pem文件是X509证书,而不是RSA公钥。您应该按照部分中的描述在主节点上生成密钥对,并将公钥复制到从节点的authorized_keys中。 - Anatoliy
我相信@Anatoliy是正确的;他应该把那个变成一个答案,而不仅仅是一个评论,这样我们就可以点赞了。 :) - Iterator
也许可以忽略我在你另一个问题中的回答,即“使用StarCluster”,因为我现在看到你已经这样做了,但是尝试在私有IP范围内运行整个集群,一旦我开始这样做,就不需要再费心处理密钥或证书。 - Thell
2个回答

2

看起来不是太糟糕,但 pem 文件是错的。但有时候并不是那么简单,很多人都必须解决这些问题。你可以在这篇文章中找到很多贴士:

根据我的经验,大多数人在以下几个步骤遇到问题:

  • 你能通过 ssh 登录到机器吗?(ssh ec2-00-00-00-000.compute-1.amazonaws.com)。尝试使用公共 DNS,而不是公共 IP 进行连接。
  • 你应该检查 AWS 中的“安全组”,看看 22 端口是否对所有机器都开放了!

如果您计划启动超过 10 台工作机器,则应在您的机器上安装 MPI(性能更好!)

来自 cloudnumbers.com 的 Markus :-)


我可以通过ssh登录到从节点,所有机器都属于同一安全组。同时,我使用公共DNS进行连接。 - harshsinghal

1

我相信@Anatoliy是正确的:您正在使用X.509证书。要添加SSH密钥的确切步骤,请查看EC2入门指南中的“凭据类型”部分。

要上传自己的SSH密钥,请查看Alestic的此页面

一开始可能有点混淆,但您需要清楚哪些是您的访问密钥、证书和密钥对,这些可能出现在带有DSA或RSA的文本文件中。


谢谢提供链接。不知怎么回事,这比我预想的要复杂得多。 - harshsinghal
它会变得更容易,但这并不归功于亚马逊的入门材料——通常只有在一个人掌握所有内容之后才能理解。Alestic是一个值得了解的好网站。 - Iterator
1
你对 http://web.mit.edu/stardev/cluster/docs/0.92rc2/quickstart.html 有什么看法? - harshsinghal
1
仅供参考,StarCluster有一个“createkey”命令,可以为您创建一个新的EC2密钥对:$ starcluster createkey mykey -o ~/.ssh/ec2key.rsa - jtriley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接