您能以编程方式轻松控制Elastic Mapreduce作业吗?

时间:2012-06-08 02:36:57

标签: ruby hadoop elastic-map-reduce amazon-emr

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

2 个答案:

答案 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

我希望他们能够接受。