我正在尝试创建一个PHP页面来启动集群并将作业添加到作业流.
$response = $emr->run_job_flow($nameOfRun, array(
'Ec2KeyName' => 'hadoop',
'HadoopVersion' => '0.20',
'KeepJobFlowAliveWhenNoSteps' => $clusterAlive,
'InstanceGroups' => array(
array( // Group #1
'InstanceCount' => $numOfMaster,
'InstanceRole' => 'MASTER',
'InstanceType' => $masterInstanceType,
'Market' => 'ON_DEMAND',
'Name' => 'Master',
),
array( // Group #2
'InstanceCount' => $numOfSlaves,
'InstanceRole' => 'CORE',
'InstanceType' => $slaveInstanceType,
'Market' => 'ON_DEMAND',
'Name' => 'Slaves',
)
),
'Placement' => array(
'AvailabilityZone' => 'us-east-1d'
)
));
启动集群,我可以看到作业流ID.但是它在启动后立即开始关闭.当我执行一个弹性映射–list时,对于该群集,状态为Failed.
任何已知问题或我做错任何地方吗? AvailabilityZone可能是造成此问题的原因吗?
我从AWS Console进行了检查,它给出了此错误-给定的SSH密钥名称无效
我查了一下,快捷键和config.inc.php中提供密钥我是正确的,工作.
问候,
Kartikeya Sinha
解决方法:
看起来有四个不同的陷阱可能会导致此错误,如此AWS thread:所述
>从控制台中指定确切的密钥对名称.
>指定与端点区域不同的区域中存在的密钥对.
>将密钥对用于其他AWS服务,而不是用于EC2.
>使用重命名的密钥对pem文件时,它应与控制台中的密钥对匹配(实际上是1的特殊情况).
如果一切正常,请尝试删除密钥对并制作一个新的密钥对.
根据对PHP SDK文档的阅读,我认为问题在于您完全指定了EC2KeyName(您的注释表明您不想将特定的pem文件绑定到EC2实例;您只想使用秘密访问)键和访问键).
Ec2KeyName – string – Optional – Specifies the name of the Amazon EC2 key pair that can be used to ssh to the master node as the user called “hadoop.” [Constraints: The value must be between 0 and 256 characters, and must match the following regular expression pattern:
[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*]
此参数是指可以与EC2实例关联的pem密钥对文件.您的评论建议您专门谈论AccessKeys和SecretAccessKeys,它们是不同的概念.通过pem文件,您可以通过ssh访问EC2实例.后者授权您使用AWS API.
您将能够杀死该可选参数并完成工作,尽管没有pem文件就无法进入其附属的EC2实例.