0

標準として使用されている ruby​​ で記述されたコマンド ライン クライアントがあります。ただし、1.9 では動作しません。ruby 用の非常に優れた aws-sdk もありますが、これは EMR をサポートしていません。良い代替手段はありますか?

4

2 に答える 2

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で本番環境で実行しています。

それが役立つことを願っています。

于 2012-06-13T22:47:28.110 に答える
0

アップデート

完全な 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

彼らが引っ張ってくれることを願っています。

于 2012-06-08T16:43:21.610 に答える