我正在尝试创建一个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。但它在发布后立即开始关闭。当我执行elastic-mapreduce --list
时,对于该群集,状态为失败。
任何已知问题或我做错了什么? AvailabilityZone可能导致问题吗?
我从AWS控制台检查,它发出此错误 - The given SSH key name was invalid
我查了一下,我在config.inc.php中提供的访问密钥和密钥是正确无误的。
此致 Kartikeya Sinha
答案 0 :(得分:3)
看起来有四种可能导致错误的不同问题,如AWS thread:
中所述如果所有看起来都正确,请尝试删除密钥对并创建一个新密钥对。
基于对PHP SDK文档的阅读,我认为问题在于您完全指定EC2KeyName
(您的评论建议您不要将特定的pem文件绑定到EC2实例;您只需要使用密钥和访问密钥进行访问。
Ec2KeyName - string - 可选 - 指定可用于ssh到主节点的Amazon EC2密钥对的名称,用户名为“hadoop”。[约束:值必须介于0到256个字符之间,并且必须匹配以下正则表达式模式:
[\ u0020- \ uD7FF \ uE000- \ uFFFD \ uD800 \ uDC00- \ uDBFF \ uDFFF \ r \ n \吨] *]
此参数指的是您可以与EC2实例关联的pem密钥对文件。您的评论建议您专门讲述AccessKeys和SecretAccessKeys,它们是不同的概念。 pem文件为您提供ssh
对EC2实例的访问权限。后者授权您使用AWS API。
你应该能够杀死那个可选参数并使工作有效,尽管如果你没有pem文件,你将无法ssh
进入其附属的EC2实例。
答案 1 :(得分:0)
我错了:(这解决了我的情况) 在AWS开发工具包的config.ini.php文件中指定访问密钥和密钥的密钥对的名称以及在启动集群时要提供的EC2KeyName应该是相同的。