3

我正在尝试创建一个 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时,该集群的状态为 Failed。

任何已知问题或我做错的任何地方?可用性区域是否可能导致问题?

我从 AWS 控制台检查,它给出了这个错误 -The given SSH key name was invalid 我检查了,我在 config.inc.php 中提供的访问密钥和密钥是正确的并且可以工作。

问候, Kartikeya Sinha

4

2 回答 2

3

看起来有四个不同的陷阱可能导致错误,如此AWS 线程中所述:

  1. 从控制台指定确切的密钥对名称。
  2. 指定存在于与端点所在区域不同的区域中的密钥对。
  3. 为不同的 AWS 服务使用密钥对,而不是为 EC2 使用密钥对。
  4. 使用重命名的密钥对 pem 文件,它应该与控制台中的密钥对匹配(实际上是 1 的特殊情况)。

如果一切正常,请尝试删除密钥对并创建一个新的。


根据对PHP SDK文档的阅读,我认为问题在于您根本没有指定EC2KeyName(您的评论表明您不想将特定的 pem 文件绑定到 EC2 实例;您只想使用秘密访问密钥和访问密钥)。

Ec2KeyName - 字符串 - 可选 - 指定 Amazon EC2 密钥对的名称,该密钥对可用于以用户名为“hadoop”的身份通过 ssh 连接到主节点。[约束:该值必须介于 0 到 256 个字符之间,并且必须匹配以下正则表达式模式:

[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*]

此参数指的是您可以与 EC2 实例关联的 pem 密钥对文件。您的评论表明您正在专门谈论 AccessKeys 和 SecretAccessKeys,它们是不同的概念。pem 文件使您ssh可以访问 EC2 实例。后者授权您使用 AWS API。

您应该能够终止该可选参数并让作业正常工作,尽管您将无法在ssh没有 pem 文件的情况下进入其附属的 EC2 实例。

于 2012-08-30T12:19:54.407 回答
0

我错的地方:(这解决了我的情况)AWS SDK的config.ini.php文件中指定的访问密钥和秘密密钥的密钥对的名称和启动集群时要提供的EC2KeyName应该是相同的.

于 2012-08-30T14:13:46.887 回答