1

我正在尝试通过 AWS SDK for PHP 添加一些工作。我能够成功启动集群并通过 API 启动新的作业流程,但在尝试创建 Hadoop Streaming 步骤时出现错误。

这是我的代码:

// add some jobflow steps
$response = $emr->add_job_flow_steps($JobFlowId, array(
    new CFStepConfig(array(
        'Name' => 'MapReduce Step 1. Test',
        'ActionOnFailure' => 'TERMINATE_JOB_FLOW',
        'HadoopJarStep' => array(
    'Jar' => '/home/hadoop/contrib/streaming/hadoop-streaming.jar',
            // ERROR IS HERE!!!! How can we pas the parameters?
    'Args' => array(
                '-input s3://logs-input/appserver1 -output s3://logs-input/job123/ -mapper s3://myscripts/mapper-apache.php -reducer s3://myscripts/reducer.php',
              ),
        )
   )),
));

我收到如下错误:无效的流参数'-input s3://.... -output s3://..... -mapper s3://....../mapper.php -reducer s3://...../reducer.php"

所以不清楚如何将参数传递给 Hadoop Streaming JAR ?

官方 AWS SDK for PHP 文档不提供任何示例或文档。

可能相关的未答复线程:

使用 aws php sdk 将参数传递给 hive 脚本

4

2 回答 2

1

这对我有用:

'Args' => array( '-input','s3://mybucket/in/','-output','s3://mybucket/oo/',
                '-mapper','s3://mybucket/c/mapperT1.php',
                    '-reducer','s3://mybucket/c/reducerT1.php')
于 2012-04-24T02:01:47.673 回答
1

我尚未使用适用于 PHP 的 AWS 开发工具包执行这些步骤,但在其他环境中,我认为您指定Amazon S3位置的方式可能不正确 - 我认为您的输入和输出需要如下所示参数:

  • s3n://logs-input/appserver1
  • s3n://logs-input/job123/

请注意 s3n: 与 s3: URI 方案的用法,根据相应的常见问题解答,这可能是Amazon EMR的要求Amazon Elastic MapReduce 如何使用 Amazon EC2 和 Amazon S3?

客户将他们的输入数据和数据处理应用程序上传到 Amazon S3。然后,Amazon Elastic MapReduce 会启动客户指定的多个 Amazon EC2 实例。该服务开始执行作业流,同时使用 S3N 协议将输入数据从 Amazon S3 拉到已启动的 Amazon EC2 实例中。作业流程完成后,Amazon Elastic MapReduce 将输出数据传输到 Amazon S3,然后客户可以在其中检索它或将其用作另一个作业流程的输入。[强调我的]


附录

Hadoop Wiki 中解释了两种 URI 方案之间的区别,请参阅AmazonS3

Hadoop 提供了两个使用 S3 的文件系统。

  • S3 Native FileSystem(URI 方案:s3n) 用于在 S3 上读取和写入常规文件的本机文件系统。此文件系统的优点是您可以访问 S3 上使用其他工具编写的文件。相反,其他工具可以访问使用 Hadoop 编写的文件。缺点是 S3 对文件大小施加了 5GB 的限制。由于这个原因,它不适合作为 HDFS(支持非常大的文件)的替代品。
  • S3 块文件系统(URI 方案:s3) 由 S3 支持的基于块的文件系统。文件存储为块,就像它们在 HDFS 中一样。这允许有效地实现重命名。此文件系统要求您为文件系统专用一个存储桶 - 您不应使用包含文件的现有存储桶,或将其他文件写入同一存储桶。此文件系统存储的文件可以大于 5GB,但它们不能与其他 S3 工具互操作。
于 2012-04-02T15:22:00.717 回答