有一个用 ruby 编写的命令行客户端,用作标准。但是,它不在 1.9 中运行。ruby 也有一个非常好的 aws-sdk,但它不支持 EMR。有没有好的选择?
2 回答
2012 年 6 月 22 日更新:亚马逊正在审查 @nkadwa 的拉取请求(见上文)。请注意这一点。
我一直在使用 Ruby 命令行客户端,但我构建的许多基于 Ruby/Rails 的工具需要 ruby 1.9.3。我的解决方法是RVM。
假设$HOME/projects/elastic-mapreduce
您有 EMR Ruby 客户端假设您也有$HOME/projects/myproj
您可以告诉您的系统将 ruby-1.8.7 用于 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 的生产环境中运行。
希望有帮助。
更新
AWS SDK for Ruby v1.6+ 现在包含完整的 EMR 支持。https://github.com/amazonwebservices/aws-sdk-for-ruby
以前的
我添加了适用于 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
我希望他们能接受。