-ださろぐシステム開発者からコーヒー屋への道。MapReduceですね。PHP2を使用してPHPスクリプトからEMRのジョブフローを作成、実行してみます。PHP実行するジョブ先の記事に倣ってLTSVのhttpdログを集計するスクリプトをs3に配置してみます。ログの件数をpath、refごとに集計した結果をs3://bucket-name/httpd/pv_reports/以下に格納するスクリプトです。このスクリプトは変数${DATE}を受け取ります。path;このスクリプトをs3://bucket-name/create_report.hqlとしてs3上に配置します。これをerasticmapreduceコマンドで実行すると以下のようになります。-d,DATE='2013-09-01'ジョブフローが作成され、2013-09-01という引数がhiveスクリプトに渡されEMRが実行されます。このままコマンドラインのスクリプトを動的に生成してshell_execなどでphpから実行することも出来ますが、折角なので同じことをphp-sdkから実行してみましょう。以下のようになります。],],],],]);・・・えっとだいぶだるい長いですね。syntaxを使ったりしてますが焼け石に水レベルで長いです。いくつかポイントを書きます。コマンドラインでは–hive-scriptで簡素に指定されてましたがhiveの立ち上げも含めSTEPごとの指定に分かれてますJarとかArgsとかに指定するオプションはコマンドライン指定時には勝手に出来てましたが明示的に指定する必要があります。具体的には実際に実行されたジョブをEMR管理画面のStepsから見るとわかります。AmiVersionは明示的に指定する必要があります。コマンドラインスクリプトでは指定していませんが、指定しないとクソ古いAMIで実行されます。Argsはスペース区切りの部分をすべて配列で指定する必要があります。サボって文字列でまとめて渡すと””でエスケープされて動きません。要素の中にスペースがあると自動で””で括られるため、必要ないところではスペースを含めてはいけません。2のインストールはpharパッケージだけでなく、composerからもインストール出来ます。psr-0のオートローダーに対応しています。httpリクエストにguzzleを使ってます。2はなかなかモダンな作りになってます。リクエストの戻り値はオブジェクトでかえってくるのですがそのままechoしてみてもちゃんと整形された文字列が出力されます。toStringがちゃんと実装されているのでしょう。オプションが複雑ですが、そのあたりはドキュメントと、テストコードを見てみると良いかと思います。あとリージョンの指定などは生で書いてもいいですがなるべくクラス定数を使った方がメンテしやすいと思われます。