wakoopa-elasticity 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/.autotest +2 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +2 -0
  4. data/.rvmrc +1 -0
  5. data/Gemfile +4 -0
  6. data/HISTORY.mediawiki +30 -0
  7. data/LICENSE +202 -0
  8. data/README.mediawiki +332 -0
  9. data/Rakefile +11 -0
  10. data/elasticity.gemspec +29 -0
  11. data/lib/elasticity.rb +16 -0
  12. data/lib/elasticity/aws_request.rb +52 -0
  13. data/lib/elasticity/emr.rb +282 -0
  14. data/lib/elasticity/hive_job.rb +71 -0
  15. data/lib/elasticity/job_flow.rb +53 -0
  16. data/lib/elasticity/job_flow_step.rb +36 -0
  17. data/lib/elasticity/pig_job.rb +112 -0
  18. data/lib/elasticity/simple_job.rb +50 -0
  19. data/lib/elasticity/version.rb +3 -0
  20. data/spec/fixtures/vcr_cassettes/add_instance_groups/one_group_successful.yml +38 -0
  21. data/spec/fixtures/vcr_cassettes/add_instance_groups/one_group_unsuccessful.yml +35 -0
  22. data/spec/fixtures/vcr_cassettes/add_jobflow_steps/add_multiple_steps.yml +252 -0
  23. data/spec/fixtures/vcr_cassettes/describe_jobflows/all_jobflows.yml +69 -0
  24. data/spec/fixtures/vcr_cassettes/direct/terminate_jobflow.yml +32 -0
  25. data/spec/fixtures/vcr_cassettes/hive_job/hive_ads.yml +35 -0
  26. data/spec/fixtures/vcr_cassettes/modify_instance_groups/set_instances_to_3.yml +32 -0
  27. data/spec/fixtures/vcr_cassettes/pig_job/apache_log_reports.yml +35 -0
  28. data/spec/fixtures/vcr_cassettes/pig_job/apache_log_reports_with_bootstrap.yml +35 -0
  29. data/spec/fixtures/vcr_cassettes/run_jobflow/word_count.yml +35 -0
  30. data/spec/fixtures/vcr_cassettes/set_termination_protection/nonexistent_job_flows.yml +35 -0
  31. data/spec/fixtures/vcr_cassettes/set_termination_protection/protect_multiple_job_flows.yml +32 -0
  32. data/spec/fixtures/vcr_cassettes/terminate_jobflows/one_jobflow.yml +32 -0
  33. data/spec/lib/elasticity/aws_request_spec.rb +62 -0
  34. data/spec/lib/elasticity/emr_spec.rb +794 -0
  35. data/spec/lib/elasticity/hive_job_spec.rb +96 -0
  36. data/spec/lib/elasticity/job_flow_spec.rb +139 -0
  37. data/spec/lib/elasticity/job_flow_step_spec.rb +76 -0
  38. data/spec/lib/elasticity/pig_job_spec.rb +211 -0
  39. data/spec/spec_helper.rb +43 -0
  40. metadata +253 -0
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elasticity::HiveJob do
4
+
5
+ describe ".new" do
6
+
7
+ it "should have good defaults" do
8
+ hive = Elasticity::HiveJob.new("access", "secret")
9
+ hive.aws_access_key_id.should == "access"
10
+ hive.aws_secret_access_key.should == "secret"
11
+ hive.ec2_key_name.should == "default"
12
+ hive.hadoop_version.should == "0.20"
13
+ hive.instance_count.should == 2
14
+ hive.master_instance_type.should == "m1.small"
15
+ hive.name.should == "Elasticity Hive Job"
16
+ hive.slave_instance_type.should == "m1.small"
17
+ hive.action_on_failure.should == "TERMINATE_JOB_FLOW"
18
+ hive.log_uri.should == nil
19
+ end
20
+
21
+ end
22
+
23
+ describe "#run" do
24
+
25
+ it "should run the script with the specified variables and return the jobflow_id" do
26
+ aws = Elasticity::EMR.new("", "")
27
+ aws.should_receive(:run_job_flow).with({
28
+ :name => "Elasticity Hive Job",
29
+ :log_uri => "s3n://slif-test/output/logs",
30
+ :instances => {
31
+ :ec2_key_name => "default",
32
+ :hadoop_version => "0.20",
33
+ :instance_count => 2,
34
+ :master_instance_type => "m1.small",
35
+ :slave_instance_type => "m1.small",
36
+ },
37
+ :steps => [
38
+ {
39
+ :action_on_failure => "TERMINATE_JOB_FLOW",
40
+ :hadoop_jar_step => {
41
+ :jar => "s3://elasticmapreduce/libs/script-runner/script-runner.jar",
42
+ :args => [
43
+ "s3://elasticmapreduce/libs/hive/hive-script",
44
+ "--base-path",
45
+ "s3://elasticmapreduce/libs/hive/",
46
+ "--install-hive"
47
+ ],
48
+ },
49
+ :name => "Setup Hive"
50
+ },
51
+ {
52
+ :action_on_failure => "CONTINUE",
53
+ :hadoop_jar_step => {
54
+ :jar => "s3://elasticmapreduce/libs/script-runner/script-runner.jar",
55
+ :args => [
56
+ "s3://elasticmapreduce/libs/hive/hive-script",
57
+ "--run-hive-script",
58
+ "--args",
59
+ "-f", "s3n://slif-hive/test.q",
60
+ "-d", "XREFS=s3n://slif-test/xrefs",
61
+ "-d", "OUTPUT=s3n://slif-test/output"
62
+ ],
63
+ },
64
+ :name => "Run Hive Script"
65
+ }
66
+ ]
67
+ }).and_return("new_jobflow_id")
68
+ Elasticity::EMR.should_receive(:new).with("access", "secret").and_return(aws)
69
+
70
+ hive = Elasticity::HiveJob.new("access", "secret")
71
+ hive.log_uri = "s3n://slif-test/output/logs"
72
+ hive.action_on_failure = "CONTINUE"
73
+ jobflow_id = hive.run('s3n://slif-hive/test.q', {
74
+ 'OUTPUT' => 's3n://slif-test/output',
75
+ 'XREFS' => 's3n://slif-test/xrefs'
76
+ })
77
+ jobflow_id.should == "new_jobflow_id"
78
+ end
79
+
80
+ end
81
+
82
+ describe "integration happy path" do
83
+ use_vcr_cassette "hive_job/hive_ads", :record => :none
84
+ it "should kick off the sample Amazion EMR Hive application" do
85
+ hive = Elasticity::HiveJob.new(AWS_ACCESS_KEY_ID, AWS_SECRET_KEY)
86
+ hive.ec2_key_name = "sharethrough_dev"
87
+ jobflow_id = hive.run("s3n://elasticmapreduce/samples/hive-ads/libs/model-build.q", {
88
+ "LIBS" => "s3n://elasticmapreduce/samples/hive-ads/libs",
89
+ "INPUT" => "s3n://elasticmapreduce/samples/hive-ads/tables",
90
+ "OUTPUT" => "s3n://slif-elasticity/hive-ads/output/2011-04-19"
91
+ })
92
+ jobflow_id.should == "j-1UUVYMHBLKEGN"
93
+ end
94
+ end
95
+
96
+ end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elasticity::JobFlow do
4
+
5
+ before do
6
+ describe_jobflows_xml = <<-JOBFLOWS
7
+ <DescribeJobFlowsResponse xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-03-31">
8
+ <DescribeJobFlowsResult>
9
+ <JobFlows>
10
+ <member>
11
+ <JobFlowId>j-p</JobFlowId>
12
+ <Name>Pig Job</Name>
13
+ <ExecutionStatusDetail>
14
+ <CreationDateTime>
15
+ 2011-10-04T21:49:16Z
16
+ </CreationDateTime>
17
+ <StartDateTime>
18
+ 2011-10-04T21:49:17Z
19
+ </StartDateTime>
20
+ <ReadyDateTime>
21
+ 2011-10-04T21:49:18Z
22
+ </ReadyDateTime>
23
+ <State>TERMINATED</State>
24
+ </ExecutionStatusDetail>
25
+ <Steps>
26
+ <member>
27
+ <StepConfig>
28
+ <Name>Setup Hive</Name>
29
+ </StepConfig>
30
+ <ExecutionStatusDetail>
31
+ <State>FAILED</State>
32
+ </ExecutionStatusDetail>
33
+ </member>
34
+ <member>
35
+ <StepConfig>
36
+ <Name>Run Hive Script</Name>
37
+ </StepConfig>
38
+ <ExecutionStatusDetail>
39
+ <State>PENDING</State>
40
+ </ExecutionStatusDetail>
41
+ </member>
42
+ </Steps>
43
+ <Instances>
44
+ <Placement>
45
+ <AvailabilityZone>
46
+ eu-west-1a
47
+ </AvailabilityZone>
48
+ </Placement>
49
+ <SlaveInstanceType>
50
+ m1.small
51
+ </SlaveInstanceType>
52
+ <MasterInstanceType>
53
+ m1.small
54
+ </MasterInstanceType>
55
+ <Ec2KeyName>
56
+ myec2keyname
57
+ </Ec2KeyName>
58
+ <InstanceCount>
59
+ 4
60
+ </InstanceCount>
61
+ </Instances>
62
+ </member>
63
+ <member>
64
+ <JobFlowId>j-h</JobFlowId>
65
+ <Name>Hive Job</Name>
66
+ <ExecutionStatusDetail>
67
+ <CreationDateTime>
68
+ 2011-10-04T22:49:16Z
69
+ </CreationDateTime>
70
+ <StartDateTime>
71
+ 2011-10-04T22:49:17Z
72
+ </StartDateTime>
73
+ <ReadyDateTime>
74
+ 2011-10-04T22:49:18Z
75
+ </ReadyDateTime>
76
+ <State>TERMINATED</State>
77
+ </ExecutionStatusDetail>
78
+ <Instances>
79
+ <Placement>
80
+ <AvailabilityZone>
81
+ eu-west-1b
82
+ </AvailabilityZone>
83
+ </Placement>
84
+ <SlaveInstanceType>
85
+ c1.medium
86
+ </SlaveInstanceType>
87
+ <MasterInstanceType>
88
+ c1.medium
89
+ </MasterInstanceType>
90
+ <Ec2KeyName>
91
+ myec2keyname
92
+ </Ec2KeyName>
93
+ <InstanceCount>
94
+ 2
95
+ </InstanceCount>
96
+ </Instances>
97
+ </member>
98
+ </JobFlows>
99
+ </DescribeJobFlowsResult>
100
+ </DescribeJobFlowsResponse>
101
+ JOBFLOWS
102
+ describe_jobflows_document = Nokogiri::XML(describe_jobflows_xml)
103
+ describe_jobflows_document.remove_namespaces!
104
+ @members_nodeset = describe_jobflows_document.xpath('/DescribeJobFlowsResponse/DescribeJobFlowsResult/JobFlows/member')
105
+ end
106
+
107
+ describe ".from_xml" do
108
+ it "should return a JobFlow with the appropriate fields initialized" do
109
+ jobflow = Elasticity::JobFlow.from_member_element(@members_nodeset[0])
110
+ jobflow.name.should == "Pig Job"
111
+ jobflow.jobflow_id.should == "j-p"
112
+ jobflow.state.should == "TERMINATED"
113
+ jobflow.steps.map(&:name).should == ["Setup Hive", "Run Hive Script"]
114
+ jobflow.steps.map(&:state).should == ["FAILED", "PENDING"]
115
+ jobflow.created_at.should == "2011-10-04T21:49:16Z"
116
+ jobflow.started_at.should == "2011-10-04T21:49:17Z"
117
+ jobflow.ready_at.should == "2011-10-04T21:49:18Z"
118
+ jobflow.master_instance_type.should == "m1.small"
119
+ jobflow.slave_instance_type.should == "m1.small"
120
+ jobflow.instance_count.should == "4"
121
+ end
122
+ end
123
+
124
+ describe ".from_jobflows_nodeset" do
125
+ it "should return JobFlows with the appropriate fields initialized" do
126
+ jobflow = Elasticity::JobFlow.from_members_nodeset(@members_nodeset)
127
+ jobflow.map(&:name).should == ["Pig Job", "Hive Job"]
128
+ jobflow.map(&:jobflow_id).should == ["j-p", "j-h"]
129
+ jobflow.map(&:state).should == ["TERMINATED", "TERMINATED"]
130
+ jobflow.map(&:created_at).should == ["2011-10-04T21:49:16Z","2011-10-04T22:49:16Z"]
131
+ jobflow.map(&:started_at).should == ["2011-10-04T21:49:17Z","2011-10-04T22:49:17Z"]
132
+ jobflow.map(&:ready_at).should == ["2011-10-04T21:49:18Z","2011-10-04T22:49:18Z"]
133
+ jobflow.map(&:master_instance_type).should == ["m1.small","c1.medium"]
134
+ jobflow.map(&:slave_instance_type).should == ["m1.small", "c1.medium"]
135
+ jobflow.map(&:instance_count).should == ["4","2"]
136
+ end
137
+ end
138
+
139
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elasticity::JobFlowStep do
4
+
5
+ before do
6
+ describe_jobflows_xml = <<-JOBFLOWS
7
+ <DescribeJobFlowsResponse xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-03-31">
8
+ <DescribeJobFlowsResult>
9
+ <JobFlows>
10
+ <member>
11
+ <JobFlowId>j-p</JobFlowId>
12
+ <Name>Pig Job</Name>
13
+ <ExecutionStatusDetail>
14
+ <State>TERMINATED</State>
15
+ </ExecutionStatusDetail>
16
+ <Steps>
17
+ <member>
18
+ <StepConfig>
19
+ <Name>Setup Hive</Name>
20
+ </StepConfig>
21
+ <ExecutionStatusDetail>
22
+ <State>FAILED</State>
23
+ <StartDateTime>
24
+ 2011-10-04T21:49:16Z
25
+ </StartDateTime>
26
+ <EndDateTime>
27
+ 2011-10-04T21:51:16Z
28
+ </EndDateTime>
29
+ </ExecutionStatusDetail>
30
+ </member>
31
+ <member>
32
+ <StepConfig>
33
+ <Name>Run Hive Script</Name>
34
+ </StepConfig>
35
+ <ExecutionStatusDetail>
36
+ <State>PENDING</State>
37
+ <StartDateTime>
38
+ 2011-10-04T21:51:18Z
39
+ </StartDateTime>
40
+ <EndDateTime>
41
+ </EndDateTime>
42
+ </ExecutionStatusDetail>
43
+ </member>
44
+ </Steps>
45
+ </member>
46
+ </JobFlows>
47
+ </DescribeJobFlowsResult>
48
+ </DescribeJobFlowsResponse>
49
+ JOBFLOWS
50
+ describe_jobflows_document = Nokogiri::XML(describe_jobflows_xml)
51
+ describe_jobflows_document.remove_namespaces!
52
+ @members_nodeset = describe_jobflows_document.xpath('/DescribeJobFlowsResponse/DescribeJobFlowsResult/JobFlows/member/Steps/member')
53
+ end
54
+
55
+ describe ".from_xml" do
56
+ it "should return a JobFlowStep with the appropriate fields initialized" do
57
+ jobflow_step = Elasticity::JobFlowStep.from_member_element(@members_nodeset[0])
58
+ jobflow_step.name.should == "Setup Hive"
59
+ jobflow_step.state.should == "FAILED"
60
+ jobflow_step.started_at.should == "2011-10-04T21:49:16Z"
61
+ jobflow_step.ended_at.should == "2011-10-04T21:51:16Z"
62
+ end
63
+ end
64
+
65
+ describe ".from_steps_nodeset" do
66
+ it "should return JobFlowSteps with the appropriate fields initialized" do
67
+ jobflow_steps = Elasticity::JobFlowStep.from_members_nodeset(@members_nodeset)
68
+ jobflow_steps.map(&:name).should == ["Setup Hive", "Run Hive Script"]
69
+ jobflow_steps.map(&:state).should == ["FAILED", "PENDING"]
70
+ jobflow_steps.map(&:started_at).should == ["2011-10-04T21:49:16Z", "2011-10-04T21:51:18Z"]
71
+ jobflow_steps.map(&:ended_at).should == ["2011-10-04T21:51:16Z", ""]
72
+ end
73
+ end
74
+
75
+
76
+ end
@@ -0,0 +1,211 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elasticity::PigJob do
4
+
5
+ describe ".new" do
6
+ it "should have good defaults" do
7
+ pig = Elasticity::PigJob.new("access", "secret")
8
+ pig.aws_access_key_id.should == "access"
9
+ pig.aws_secret_access_key.should == "secret"
10
+ pig.ec2_key_name.should == "default"
11
+ pig.hadoop_version.should == "0.20"
12
+ pig.instance_count.should == 2
13
+ pig.master_instance_type.should == "m1.small"
14
+ pig.name.should == "Elasticity Pig Job"
15
+ pig.slave_instance_type.should == "m1.small"
16
+ pig.action_on_failure.should == "TERMINATE_JOB_FLOW"
17
+ pig.log_uri.should == nil
18
+ pig.parallels.should == 1
19
+ end
20
+ end
21
+
22
+ describe "#instance_count=" do
23
+ it "should not allow instances to be set less than 2" do
24
+ pig = Elasticity::PigJob.new("access", "secret")
25
+ lambda {
26
+ pig.instance_count = 1
27
+ }.should raise_error(ArgumentError, "Instance count cannot be set to less than 2 (requested 1)")
28
+ end
29
+ end
30
+
31
+ describe "calculated value of parallels" do
32
+
33
+ before do
34
+ @pig = Elasticity::PigJob.new("access", "secret")
35
+ @pig.instance_count = 8
36
+ end
37
+
38
+ context "when slave is m1.small" do
39
+ it "should be 7" do
40
+ @pig.slave_instance_type = "m1.small"
41
+ @pig.parallels.should == 7
42
+ end
43
+ end
44
+
45
+ context "when slave is m1.large" do
46
+ it "should be 13" do
47
+ @pig.slave_instance_type = "m1.large"
48
+ @pig.parallels.should == 13
49
+ end
50
+ end
51
+
52
+ context "when slave is c1.medium" do
53
+ it "should be 13" do
54
+ @pig.slave_instance_type = "c1.medium"
55
+ @pig.parallels.should == 13
56
+ end
57
+ end
58
+
59
+ context "when slave is m1.xlarge" do
60
+ it "should be 26" do
61
+ @pig.slave_instance_type = "m1.xlarge"
62
+ @pig.parallels.should == 26
63
+ end
64
+ end
65
+
66
+ context "when slave is c1.xlarge" do
67
+ it "should be 26" do
68
+ @pig.slave_instance_type = "c1.xlarge"
69
+ @pig.parallels.should == 26
70
+ end
71
+ end
72
+
73
+ context "when slave is any other type" do
74
+ it "should be 1" do
75
+ @pig.slave_instance_type = "foo"
76
+ @pig.parallels.should == 7
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ describe "#run" do
83
+
84
+ context "when no bootstrap actions are specified" do
85
+
86
+ it "should run the script with the specified variables and return the jobflow_id" do
87
+ aws = Elasticity::EMR.new("", "")
88
+ aws.should_receive(:run_job_flow).with({
89
+ :name => "Elasticity Pig Job",
90
+ :log_uri => "s3n://slif-test/output/logs",
91
+ :instances => {
92
+ :ec2_key_name => "default",
93
+ :hadoop_version => "0.20",
94
+ :instance_count => 8,
95
+ :master_instance_type => "m1.small",
96
+ :slave_instance_type => "m1.xlarge",
97
+ },
98
+ :steps => [
99
+ {
100
+ :action_on_failure => "TERMINATE_JOB_FLOW",
101
+ :hadoop_jar_step => {
102
+ :jar => "s3://elasticmapreduce/libs/script-runner/script-runner.jar",
103
+ :args => [
104
+ "s3://elasticmapreduce/libs/pig/pig-script",
105
+ "--base-path",
106
+ "s3://elasticmapreduce/libs/pig/",
107
+ "--install-pig"
108
+ ],
109
+ },
110
+ :name => "Setup Pig"
111
+ },
112
+ {
113
+ :action_on_failure => "CONTINUE",
114
+ :hadoop_jar_step => {
115
+ :jar => "s3://elasticmapreduce/libs/script-runner/script-runner.jar",
116
+ :args => [
117
+ "s3://elasticmapreduce/libs/pig/pig-script",
118
+ "--run-pig-script",
119
+ "--args",
120
+ "-p", "OUTPUT=s3n://slif-pig-test/output",
121
+ "-p", "XREFS=s3n://slif-pig-test/xrefs",
122
+ "-p", "E_PARALLELS=26",
123
+ "s3n://slif-pig-test/test.pig"
124
+ ],
125
+ },
126
+ :name => "Run Pig Script"
127
+ }
128
+ ]
129
+ }).and_return("new_jobflow_id")
130
+
131
+ Elasticity::EMR.should_receive(:new).with("access", "secret").and_return(aws)
132
+ pig = Elasticity::PigJob.new("access", "secret")
133
+
134
+ pig.log_uri = "s3n://slif-test/output/logs"
135
+ pig.action_on_failure = "CONTINUE"
136
+ pig.instance_count = 8
137
+ pig.slave_instance_type = "m1.xlarge"
138
+
139
+ jobflow_id = pig.run('s3n://slif-pig-test/test.pig', {
140
+ 'OUTPUT' => 's3n://slif-pig-test/output',
141
+ 'XREFS' => 's3n://slif-pig-test/xrefs'
142
+ })
143
+ jobflow_id.should == "new_jobflow_id"
144
+ end
145
+ end
146
+
147
+ context "when bootstrap actions are specified" do
148
+ it "should run the script wth the proper job configuration" do
149
+ aws = Elasticity::EMR.new("", "")
150
+ aws.should_receive(:run_job_flow).with(hash_including({
151
+ :bootstrap_actions => [
152
+ {
153
+ :name => "Elasticity Bootstrap Action (Configure Hadoop)",
154
+ :script_bootstrap_action => {
155
+ :path => "s3n://elasticmapreduce/bootstrap-actions/configure-hadoop",
156
+ :args => ["-m", "foo=111"]
157
+ }
158
+ },
159
+ {
160
+ :name => "Elasticity Bootstrap Action (Configure Hadoop)",
161
+ :script_bootstrap_action => {
162
+ :path => "s3n://elasticmapreduce/bootstrap-actions/configure-hadoop",
163
+ :args => ["-m", "bar=222"]
164
+ }
165
+ }
166
+ ],
167
+ }))
168
+
169
+ Elasticity::EMR.should_receive(:new).with("access", "secret").and_return(aws)
170
+ pig = Elasticity::PigJob.new("access", "secret")
171
+ pig.add_hadoop_bootstrap_action("-m", "foo=111")
172
+ pig.add_hadoop_bootstrap_action("-m", "bar=222")
173
+ pig.run('s3n://slif-pig-test/test.pig')
174
+ end
175
+ end
176
+
177
+ end
178
+
179
+ describe "integration happy path" do
180
+
181
+ context "with bootstrap actions" do
182
+ use_vcr_cassette "pig_job/apache_log_reports_with_bootstrap", :record => :none
183
+ it "should kick off the sample Amazion EMR Pig application" do
184
+ pig = Elasticity::PigJob.new(AWS_ACCESS_KEY_ID, AWS_SECRET_KEY)
185
+ pig.ec2_key_name = "sharethrough_dev"
186
+ pig.add_hadoop_bootstrap_action("-m", "mapred.job.reuse.jvm.num.tasks=120")
187
+ jobflow_id = pig.run("s3n://elasticmapreduce/samples/pig-apache/do-reports.pig", {
188
+ "INPUT" => "s3n://elasticmapreduce/samples/pig-apache/input",
189
+ "OUTPUT" => "s3n://slif-elasticity/pig-apache/output/2011-05-10"
190
+ })
191
+ jobflow_id.should == "j-1UK43AWRT3QHD"
192
+ end
193
+ end
194
+
195
+ context "without bootstrap actions" do
196
+ use_vcr_cassette "pig_job/apache_log_reports", :record => :none
197
+ it "should kick off the sample Amazion EMR Pig application" do
198
+ pig = Elasticity::PigJob.new(AWS_ACCESS_KEY_ID, AWS_SECRET_KEY)
199
+ pig.log_uri = "s3n://slif-elasticity/pig-apache/logs"
200
+ pig.ec2_key_name = "sharethrough_dev"
201
+ jobflow_id = pig.run("s3n://elasticmapreduce/samples/pig-apache/do-reports.pig", {
202
+ "INPUT" => "s3n://elasticmapreduce/samples/pig-apache/input",
203
+ "OUTPUT" => "s3n://slif-elasticity/pig-apache/output/2011-05-04"
204
+ })
205
+ jobflow_id.should == "j-1HB7A3TBRT3VS"
206
+ end
207
+ end
208
+ end
209
+
210
+
211
+ end