標準として使用されている ruby で記述されたコマンド ライン クライアントがあります。ただし、1.9 では動作しません。ruby 用の非常に優れた aws-sdk もありますが、これは EMR をサポートしていません。良い代替手段はありますか?
2 に答える
2012 年 6 月 22 日更新: Amazon は @nkadwa のプル リクエストをレビューしています (上記参照)。そのことに注意してください。
私は Ruby コマンドライン クライアントを使用してきましたが、Ruby 1.9.3 を必要とする多くの Ruby/Rails ベースのツールを構築しています。私にとっての回避策はRVMでした。
EMR Ruby クライアントを持っているとしましょ$HOME/projects/elastic-mapreduce
う あなたも持っているとしましょう$HOME/projects/myproj
次のコマンドを使用して、システムに EMR に ruby-1.8.7 を使用するように指示できます。
echo 'rvm use ruby-1.8.7' > $HOME/projects/elastic-mapreduce/.rvmrc
echo 'rvm use ruby-1.9.3@mygemset' > $HOME/projects/myproj/.rvmrc
どこかからエラスティック map-reduce スクリプトを呼び出す必要がある場合は、次のように RVM をリグアップできます。デフォルトでは、elastic-mapreduce は同じディレクトリにある credentials.json ファイルを使用します。初めてディレクトリに入ると、システムは .rvmrc ファイルを信頼する意思があるかどうかを確認することに注意してください。
# cd'ing into the directory will output stuff to stdout when it changes
cd $HOME/elastic-mapreduce > /dev/null && rvm ruby-1.8.7; ./elastic-mapreduce [args]
または、「cd」ビジネスをスキップしたい場合は、次のようにすることができます。
# Again, redirect output after 'rvm use' so you don't get the green output
system("rvm use ruby-1.8.7 > /dev/null; /path/to/elastic-mapreduce -c /path/to/elastic-mapreduce/credentials.json --list")
インストールするには、RVM Web サイトの指示に従う必要があります (非常に簡単です)。しかし、Ruby の複数のバージョンを実行する必要がある場合には、これは完璧なソリューションです。EC2で本番環境で実行しています。
それが役立つことを願っています。
アップデート
完全な EMR サポートが AWS SDK for Ruby の v1.6+ に含まれるようになりました。https://github.com/amazonwebservices/aws-sdk-for-ruby
前
フォークでの一般的な使用に適した EMR サポートとクライアントの動作を追加しました。
https://github.com/kadwanev/aws-sdk-for-ruby/tree/add-emr
使用例:
AWS.config({:access_key_id => '', :secret_access_key => '',
:emr_key_pair => '', :emr_key_pair_file => ''})
emr = AWS::EMR.new
job = emr.jobs(:active => true).first
job.short_desc
=> {:id=>"j-2N8V9X1RWH1QJ", :state=>"WAITING", :name=>"job name", :instance_count=>"1", :instance_hours=>"2", :steps=>[{:name=>"step name", :state=>"COMPLETED", :last_change=>nil}]}
job = job.create({name: 'job name', instances: {keep_job_flow_alive_when_no_steps: true,
instance_count: 1, master_instance_type: 'm1.small', slave_instance_type: 'm1.small'}})
=> #<AWS::EMR::JobFlow:j-XXXXXXXXXXXXJ>
job.ssh_command
=> "ssh -o ServerAliveInterval=10 -o StrictHostKeyChecking=no -i key-pair-file.pem hadoop@ec2-xxx.compute-1.amazonaws.com"
job.terminate
彼らが引っ張ってくれることを願っています。