有一个用ruby编写的命令行客户端用作标准。但是,它不会在1.9中运行。 ruby还有一个非常好的aws-sdk,但它不支持EMR。有没有好的选择?
答案 0 :(得分:2)
UPDATE 6/22/2012 :亚马逊正在审核@ nkadwa的拉取请求(见上文)。请留意这一点。
我一直在使用Ruby命令行客户端,但是我构建了许多基于Ruby / Rails的工具,需要ruby 1.9.3。我的解决方法是RVM。
假设您拥有EMR Ruby客户端$HOME/projects/elastic-mapreduce
假设您还有$HOME/projects/myproj
您可以告诉您的系统使用ruby-1.8.7 for EMR:
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网站上的说明安装它(非常简单)。但是,当您需要运行多个版本的Ruby时,它是完美的解决方案。我让它在EC2中投入生产。
希望有所帮助。
答案 1 :(得分:0)
<强>更新强>
完整的EMR支持现已包含在适用于Ruby的AWS SDK的v1.6 +中。 https://github.com/amazonwebservices/aws-sdk-for-ruby
<强> PREVIOUS 强>
我在fork中添加了适合一般用法的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
我希望他们能够接受。