1

AWS SDKforPHPを介してジョブを追加しようとしています。APIを介してクラスターを正常に開始し、新しいジョブフローを開始することはできますが、Hadoopストリーミングステップを作成しようとするとエラーが発生します。

これが私のコードです:

// 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ストリーミングJARに引数を渡す方法が明確ではありませんか?

AWS SDK for PHPの公式ドキュメントには、例やドキュメントは含まれていません。

おそらく関連する未回答のスレッド:

awsphpsdkを使用してハイブスクリプトにパラメーターを渡します

4

2 に答える 2

1

AWS SDK for PHPでこれらの手順をまだ実行していませんが、他の環境から、AmazonS3の場所を指定する方法が正しくない可能性があると思います-入力と出力には次のようにする必要があると思いますパラメーター:

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

s3n:とs3:URIスキームの使用法に注意してください。これは、それぞれのFAQに従ってAmazonEMRの要件となる可能性があります。AmazonElasticMapReduceはAmazonEC2とAmazonS3をどのように使用しますか?

顧客は、入力データとデータ処理アプリケーションをAmazonS3にアップロードします。次に、Amazon Elastic MapReduceは、顧客が指定した数のAmazonEC2インスタンスを起動します。このサービスは、 S3Nプロトコルを使用してAmazon S3から起動されたAmazonEC2インスタンスに入力データをプルしながら、ジョブフローの実行を開始します。ジョブフローが終了すると、Amazon ElasticMapReduceは出力データをAmazonS3に転送し、そこで顧客はそれを取得したり、別のジョブフローの入力として使用したりできます。[強調鉱山]


付録

2つのURIスキームの違いは、HadoopWikiで説明されています。AmazonS3を参照してください。

Hadoopは、S3を使用する2つのファイルシステムを提供します。

  • S3ネイティブファイルシステム(URIスキーム:s3n) S3で通常のファイルを読み書きするためのネイティブファイルシステム。このファイルシステムの利点は、他のツールで作成されたS3上のファイルにアクセスできることです。逆に、他のツールはHadoopを使用して記述されたファイルにアクセスできます。欠点は、S3によって課されるファイルサイズの5GBの制限です。このため、HDFS(非常に大きなファイルをサポートしている)の代わりとしては適していません。
  • S3ブロックファイルシステム(URIスキーム:s3) S3に基づくブロックベースのファイルシステム。ファイルは、HDFSの場合と同じように、ブロックとして保存されます。これにより、名前変更の効率的な実装が可能になります。このファイルシステムでは、ファイルシステム専用のバケットが必要です。ファイルを含む既存のバケットを使用したり、同じバケットに他のファイルを書き込んだりしないでください。このファイルシステムによって保存されるファイルは5GBを超える可能性がありますが、他のS3ツールと相互運用することはできません。
于 2012-04-02T15:22:00.717 に答える
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 に答える