0

有一个用 ruby​​ 编写的命令行客户端,用作标准。但是,它不在 1.9 中运行。ruby 也有一个非常好的 aws-sdk,但它不支持 EMR。有没有好的选择?

4

2 回答 2

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 的生产环境中运行。

希望有帮助。

于 2012-06-13T22:47:28.110 回答
0

更新

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

我希望他们能接受。

于 2012-06-08T16:43:21.610 回答