elasticity 1.5 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/.rspec +2 -1
  2. data/.rvmrc +1 -1
  3. data/HISTORY.md +47 -24
  4. data/LICENSE +1 -1
  5. data/README.md +165 -317
  6. data/Rakefile +4 -3
  7. data/elasticity.gemspec +3 -5
  8. data/lib/elasticity.rb +10 -5
  9. data/lib/elasticity/aws_request.rb +81 -20
  10. data/lib/elasticity/custom_jar_step.rb +33 -0
  11. data/lib/elasticity/emr.rb +45 -117
  12. data/lib/elasticity/hadoop_bootstrap_action.rb +27 -0
  13. data/lib/elasticity/hive_step.rb +57 -0
  14. data/lib/elasticity/job_flow.rb +109 -39
  15. data/lib/elasticity/job_flow_status.rb +53 -0
  16. data/lib/elasticity/job_flow_status_step.rb +35 -0
  17. data/lib/elasticity/job_flow_step.rb +17 -25
  18. data/lib/elasticity/pig_step.rb +82 -0
  19. data/lib/elasticity/support/conditional_raise.rb +23 -0
  20. data/lib/elasticity/version.rb +1 -1
  21. data/spec/lib/elasticity/aws_request_spec.rb +159 -51
  22. data/spec/lib/elasticity/custom_jar_step_spec.rb +59 -0
  23. data/spec/lib/elasticity/emr_spec.rb +231 -762
  24. data/spec/lib/elasticity/hadoop_bootstrap_action_spec.rb +26 -0
  25. data/spec/lib/elasticity/hive_step_spec.rb +74 -0
  26. data/spec/lib/elasticity/job_flow_integration_spec.rb +197 -0
  27. data/spec/lib/elasticity/job_flow_spec.rb +369 -138
  28. data/spec/lib/elasticity/job_flow_status_spec.rb +147 -0
  29. data/spec/lib/elasticity/job_flow_status_step_spec.rb +73 -0
  30. data/spec/lib/elasticity/job_flow_step_spec.rb +26 -64
  31. data/spec/lib/elasticity/pig_step_spec.rb +104 -0
  32. data/spec/lib/elasticity/support/conditional_raise_spec.rb +35 -0
  33. data/spec/spec_helper.rb +1 -50
  34. data/spec/support/be_a_hash_including_matcher.rb +35 -0
  35. metadata +101 -119
  36. data/.autotest +0 -2
  37. data/lib/elasticity/custom_jar_job.rb +0 -38
  38. data/lib/elasticity/hive_job.rb +0 -69
  39. data/lib/elasticity/pig_job.rb +0 -109
  40. data/lib/elasticity/simple_job.rb +0 -51
  41. data/spec/fixtures/vcr_cassettes/add_instance_groups/one_group_successful.yml +0 -44
  42. data/spec/fixtures/vcr_cassettes/add_instance_groups/one_group_unsuccessful.yml +0 -41
  43. data/spec/fixtures/vcr_cassettes/add_jobflow_steps/add_multiple_steps.yml +0 -266
  44. data/spec/fixtures/vcr_cassettes/custom_jar_job/cloudburst.yml +0 -41
  45. data/spec/fixtures/vcr_cassettes/describe_jobflows/all_jobflows.yml +0 -75
  46. data/spec/fixtures/vcr_cassettes/direct/terminate_jobflow.yml +0 -38
  47. data/spec/fixtures/vcr_cassettes/hive_job/hive_ads.yml +0 -41
  48. data/spec/fixtures/vcr_cassettes/modify_instance_groups/set_instances_to_3.yml +0 -38
  49. data/spec/fixtures/vcr_cassettes/pig_job/apache_log_reports.yml +0 -41
  50. data/spec/fixtures/vcr_cassettes/pig_job/apache_log_reports_with_bootstrap.yml +0 -41
  51. data/spec/fixtures/vcr_cassettes/run_jobflow/word_count.yml +0 -41
  52. data/spec/fixtures/vcr_cassettes/set_termination_protection/nonexistent_job_flows.yml +0 -41
  53. data/spec/fixtures/vcr_cassettes/set_termination_protection/protect_multiple_job_flows.yml +0 -38
  54. data/spec/fixtures/vcr_cassettes/terminate_jobflows/one_jobflow.yml +0 -38
  55. data/spec/lib/elasticity/custom_jar_job_spec.rb +0 -118
  56. data/spec/lib/elasticity/hive_job_spec.rb +0 -90
  57. data/spec/lib/elasticity/pig_job_spec.rb +0 -226
@@ -1,56 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
-
4
- require 'vcr'
5
-
6
3
  require 'elasticity'
7
4
 
8
5
  ENV["RAILS_ENV"] ||= 'test'
9
6
 
10
- $:.unshift File.dirname(__FILE__)
11
-
12
- uri_regexp_matcher = lambda do |real_request, recorded_request|
13
- real_request.uri =~ recorded_request.uri
14
- end
15
-
16
- VCR.configure do |c|
17
- c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
18
- c.hook_into :webmock
19
- c.default_cassette_options = {
20
- :match_requests_on => [:method, uri_regexp_matcher]
21
- }
22
- c.before_http_request do |_|
23
- require_aws_credentials unless VCR.current_cassette.record_mode == :none
24
- end
25
- end
26
-
27
- RSpec.configure do |c|
28
- c.extend VCR::RSpec::Macros
29
- end
30
-
31
- AWS_ACCESS_KEY_ID = ENV['AWS_ACCESS_KEY_ID'] ||= 'default'
32
- AWS_SECRET_KEY = ENV['AWS_SECRET_KEY'] ||= 'default'
33
-
34
- def require_aws_credentials
35
- if AWS_ACCESS_KEY_ID == 'default' && AWS_SECRET_KEY == 'default'
36
- puts "\n\e[33m**********************************************************************************************"
37
- puts "\e[32mIf you want to record new cassettes, you'll need to provide a set of AWS credentials so"
38
- puts "Elasticity can interact with EMR. These keys can be found on your AWS Account > Security"
39
- puts "Credentials page, at the following URL:"
40
- puts ""
41
- puts " \e[0;1mhttps://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key"
42
- puts ""
43
- bourne = !ENV['SHELL'].nil? && ENV['SHELL'] =~ /(bash|ksh|zsh)/
44
- if bourne
45
- puts "\e[32mbash, zsh, ksh:"
46
- puts " export AWS_ACCESS_KEY_ID=01234"
47
- puts " export AWS_SECRET_KEY=56789"
48
- else
49
- puts "\e[32mcsh, tcsh:"
50
- puts " setenv AWS_ACCESS_KEY_ID 01234"
51
- puts " setenv AWS_SECRET_KEY 56789"
52
- end
53
- puts "\e[33m**********************************************************************************************\n"
54
- exit
55
- end
56
- end
7
+ Dir[File.join(File.dirname(__FILE__), "support", "**", "*.rb")].each { |f| require f }
@@ -0,0 +1,35 @@
1
+ RSpec::Matchers.define :be_a_hash_including do |expected|
2
+ match do |actual|
3
+ next false unless actual.is_a? Hash
4
+ next false unless expected.is_a? Hash
5
+ expected.keys.each do |key|
6
+ break false if actual[key] != expected[key]
7
+ true
8
+ end
9
+ end
10
+ end
11
+
12
+ describe :be_a_hash_including do
13
+
14
+ context 'when actual is not a Hash' do
15
+ subject { 'I AM NOT A HASH' }
16
+ it { should_not be_a_hash_including({}) }
17
+ end
18
+
19
+ context 'when expected is not a Hash' do
20
+ subject { {} }
21
+ it { should_not be_a_hash_including('') }
22
+ end
23
+
24
+ context 'when expected is included in actual' do
25
+ subject {{:actual_key1 => 'value1'}}
26
+ it { should be_a_hash_including({:actual_key1 => 'value1'})}
27
+ end
28
+
29
+ context 'when expected is not included in actual' do
30
+ subject {{:actual_key1 => 'value1'}}
31
+ it { should_not be_a_hash_including({:actual_key3 => 'value3'})}
32
+ end
33
+
34
+ end
35
+
metadata CHANGED
@@ -1,94 +1,87 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: elasticity
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: '2.0'
4
5
  prerelease:
5
- version: "1.5"
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Robert Slifka
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-03-05 00:00:00 -08:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: rest-client
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: nokogiri
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: nokogiri
32
+ requirement: !ruby/object:Gem::Requirement
31
33
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
36
38
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: rake
40
39
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
42
41
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
47
- type: :development
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: rspec
51
- prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
53
49
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: 2.8.0
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
58
54
  type: :development
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: vcr
62
55
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
64
57
  none: false
65
- requirements:
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
66
67
  - - ~>
67
- - !ruby/object:Gem::Version
68
- version: "2.0"
68
+ - !ruby/object:Gem::Version
69
+ version: 2.10.0
69
70
  type: :development
70
- version_requirements: *id005
71
- - !ruby/object:Gem::Dependency
72
- name: webmock
73
71
  prerelease: false
74
- requirement: &id006 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
75
73
  none: false
76
- requirements:
74
+ requirements:
77
75
  - - ~>
78
- - !ruby/object:Gem::Version
79
- version: 1.8.0
80
- type: :development
81
- version_requirements: *id006
82
- description: Programmatic access to Amazon's Elastic Map Reduce service, driven by the Sharethrough team's requirements for belting out EMR jobs.
76
+ - !ruby/object:Gem::Version
77
+ version: 2.10.0
78
+ description: Streamlined, Programmatic access to Amazon's Elastic Map Reduce service,
79
+ driven by the Sharethrough team's requirements for belting out EMR jobs.
83
80
  email:
84
81
  executables: []
85
-
86
82
  extensions: []
87
-
88
83
  extra_rdoc_files: []
89
-
90
- files:
91
- - .autotest
84
+ files:
92
85
  - .gitignore
93
86
  - .rspec
94
87
  - .rvmrc
@@ -101,84 +94,73 @@ files:
101
94
  - elasticity.gemspec
102
95
  - lib/elasticity.rb
103
96
  - lib/elasticity/aws_request.rb
104
- - lib/elasticity/custom_jar_job.rb
97
+ - lib/elasticity/custom_jar_step.rb
105
98
  - lib/elasticity/emr.rb
106
- - lib/elasticity/hive_job.rb
99
+ - lib/elasticity/hadoop_bootstrap_action.rb
100
+ - lib/elasticity/hive_step.rb
107
101
  - lib/elasticity/job_flow.rb
102
+ - lib/elasticity/job_flow_status.rb
103
+ - lib/elasticity/job_flow_status_step.rb
108
104
  - lib/elasticity/job_flow_step.rb
109
- - lib/elasticity/pig_job.rb
110
- - lib/elasticity/simple_job.rb
105
+ - lib/elasticity/pig_step.rb
106
+ - lib/elasticity/support/conditional_raise.rb
111
107
  - lib/elasticity/version.rb
112
- - spec/fixtures/vcr_cassettes/add_instance_groups/one_group_successful.yml
113
- - spec/fixtures/vcr_cassettes/add_instance_groups/one_group_unsuccessful.yml
114
- - spec/fixtures/vcr_cassettes/add_jobflow_steps/add_multiple_steps.yml
115
- - spec/fixtures/vcr_cassettes/custom_jar_job/cloudburst.yml
116
- - spec/fixtures/vcr_cassettes/describe_jobflows/all_jobflows.yml
117
- - spec/fixtures/vcr_cassettes/direct/terminate_jobflow.yml
118
- - spec/fixtures/vcr_cassettes/hive_job/hive_ads.yml
119
- - spec/fixtures/vcr_cassettes/modify_instance_groups/set_instances_to_3.yml
120
- - spec/fixtures/vcr_cassettes/pig_job/apache_log_reports.yml
121
- - spec/fixtures/vcr_cassettes/pig_job/apache_log_reports_with_bootstrap.yml
122
- - spec/fixtures/vcr_cassettes/run_jobflow/word_count.yml
123
- - spec/fixtures/vcr_cassettes/set_termination_protection/nonexistent_job_flows.yml
124
- - spec/fixtures/vcr_cassettes/set_termination_protection/protect_multiple_job_flows.yml
125
- - spec/fixtures/vcr_cassettes/terminate_jobflows/one_jobflow.yml
126
108
  - spec/lib/elasticity/aws_request_spec.rb
127
- - spec/lib/elasticity/custom_jar_job_spec.rb
109
+ - spec/lib/elasticity/custom_jar_step_spec.rb
128
110
  - spec/lib/elasticity/emr_spec.rb
129
- - spec/lib/elasticity/hive_job_spec.rb
111
+ - spec/lib/elasticity/hadoop_bootstrap_action_spec.rb
112
+ - spec/lib/elasticity/hive_step_spec.rb
113
+ - spec/lib/elasticity/job_flow_integration_spec.rb
130
114
  - spec/lib/elasticity/job_flow_spec.rb
115
+ - spec/lib/elasticity/job_flow_status_spec.rb
116
+ - spec/lib/elasticity/job_flow_status_step_spec.rb
131
117
  - spec/lib/elasticity/job_flow_step_spec.rb
132
- - spec/lib/elasticity/pig_job_spec.rb
118
+ - spec/lib/elasticity/pig_step_spec.rb
119
+ - spec/lib/elasticity/support/conditional_raise_spec.rb
133
120
  - spec/spec_helper.rb
134
- has_rdoc: true
121
+ - spec/support/be_a_hash_including_matcher.rb
135
122
  homepage: http://www.github.com/rslifka/elasticity
136
123
  licenses: []
137
-
138
124
  post_install_message:
139
125
  rdoc_options: []
140
-
141
- require_paths:
126
+ require_paths:
142
127
  - lib
143
- required_ruby_version: !ruby/object:Gem::Requirement
128
+ required_ruby_version: !ruby/object:Gem::Requirement
144
129
  none: false
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- version: "0"
149
- required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ segments:
135
+ - 0
136
+ hash: 4070655408797594419
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
138
  none: false
151
- requirements:
152
- - - ">="
153
- - !ruby/object:Gem::Version
154
- version: "0"
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ segments:
144
+ - 0
145
+ hash: 4070655408797594419
155
146
  requirements: []
156
-
157
147
  rubyforge_project:
158
- rubygems_version: 1.5.2
148
+ rubygems_version: 1.8.24
159
149
  signing_key:
160
150
  specification_version: 3
161
- summary: Programmatic access to Amazon's Elastic Map Reduce service.
162
- test_files:
163
- - spec/fixtures/vcr_cassettes/add_instance_groups/one_group_successful.yml
164
- - spec/fixtures/vcr_cassettes/add_instance_groups/one_group_unsuccessful.yml
165
- - spec/fixtures/vcr_cassettes/add_jobflow_steps/add_multiple_steps.yml
166
- - spec/fixtures/vcr_cassettes/custom_jar_job/cloudburst.yml
167
- - spec/fixtures/vcr_cassettes/describe_jobflows/all_jobflows.yml
168
- - spec/fixtures/vcr_cassettes/direct/terminate_jobflow.yml
169
- - spec/fixtures/vcr_cassettes/hive_job/hive_ads.yml
170
- - spec/fixtures/vcr_cassettes/modify_instance_groups/set_instances_to_3.yml
171
- - spec/fixtures/vcr_cassettes/pig_job/apache_log_reports.yml
172
- - spec/fixtures/vcr_cassettes/pig_job/apache_log_reports_with_bootstrap.yml
173
- - spec/fixtures/vcr_cassettes/run_jobflow/word_count.yml
174
- - spec/fixtures/vcr_cassettes/set_termination_protection/nonexistent_job_flows.yml
175
- - spec/fixtures/vcr_cassettes/set_termination_protection/protect_multiple_job_flows.yml
176
- - spec/fixtures/vcr_cassettes/terminate_jobflows/one_jobflow.yml
151
+ summary: Streamlined, programmatic access to Amazon's Elastic Map Reduce service.
152
+ test_files:
177
153
  - spec/lib/elasticity/aws_request_spec.rb
178
- - spec/lib/elasticity/custom_jar_job_spec.rb
154
+ - spec/lib/elasticity/custom_jar_step_spec.rb
179
155
  - spec/lib/elasticity/emr_spec.rb
180
- - spec/lib/elasticity/hive_job_spec.rb
156
+ - spec/lib/elasticity/hadoop_bootstrap_action_spec.rb
157
+ - spec/lib/elasticity/hive_step_spec.rb
158
+ - spec/lib/elasticity/job_flow_integration_spec.rb
181
159
  - spec/lib/elasticity/job_flow_spec.rb
160
+ - spec/lib/elasticity/job_flow_status_spec.rb
161
+ - spec/lib/elasticity/job_flow_status_step_spec.rb
182
162
  - spec/lib/elasticity/job_flow_step_spec.rb
183
- - spec/lib/elasticity/pig_job_spec.rb
163
+ - spec/lib/elasticity/pig_step_spec.rb
164
+ - spec/lib/elasticity/support/conditional_raise_spec.rb
184
165
  - spec/spec_helper.rb
166
+ - spec/support/be_a_hash_including_matcher.rb
data/.autotest DELETED
@@ -1,2 +0,0 @@
1
- require 'autotest/fsevent'
2
- require 'autotest/growl'
@@ -1,38 +0,0 @@
1
- module Elasticity
2
-
3
- class CustomJarJob < Elasticity::SimpleJob
4
-
5
- def initialize(aws_access_key_id, aws_secret_access_key)
6
- super
7
- @name = "Elasticity Custom Jar Job"
8
- end
9
-
10
- def run(jar, arguments=nil)
11
- jobflow_config = {
12
- :name => @name,
13
- :instances => {
14
- :ec2_key_name => @ec2_key_name,
15
- :hadoop_version => @hadoop_version,
16
- :instance_count => @instance_count,
17
- :master_instance_type => @master_instance_type,
18
- :slave_instance_type => @slave_instance_type,
19
- },
20
- :steps => [
21
- {
22
- :action_on_failure => @action_on_failure,
23
- :hadoop_jar_step => {
24
- :jar => jar
25
- },
26
- :name => "Execute Custom Jar"
27
- }
28
- ]
29
- }
30
-
31
- jobflow_config[:steps].first[:hadoop_jar_step][:args] = arguments if arguments
32
-
33
- run_job(jobflow_config)
34
- end
35
-
36
- end
37
-
38
- end
@@ -1,69 +0,0 @@
1
- module Elasticity
2
-
3
- # HiveJob allows you quickly easily kick off a Hive jobflow without
4
- # having to understand the entirety of the EMR API.
5
- class HiveJob < Elasticity::SimpleJob
6
-
7
- def initialize(aws_access_key_id, aws_secret_access_key)
8
- super
9
- @name = "Elasticity Hive Job"
10
- end
11
-
12
- # Run the specified Hive script with the specified variables.
13
- #
14
- # hive = Elasticity::HiveJob.new("access", "secret")
15
- # jobflow_id = hive.run('s3n://slif-hive/test.q', {
16
- # 'SCRIPTS' => 's3n://slif-test/scripts',
17
- # 'OUTPUT' => 's3n://slif-test/output',
18
- # 'XREFS' => 's3n://slif-test/xrefs'
19
- # })
20
- #
21
- # The variables are accessible within your Hive scripts by using the
22
- # standard ${NAME} syntax. E.g.
23
- #
24
- # ADD JAR ${SCRIPTS}/jsonserde.jar;
25
- def run(hive_script, hive_variables={})
26
- script_arguments = ["s3://elasticmapreduce/libs/hive/hive-script", "--run-hive-script", "--args"]
27
- script_arguments.concat(["-f", hive_script])
28
- hive_variables.each do |variable_name, value|
29
- script_arguments.concat(["-d", "#{variable_name}=#{value}"])
30
- end
31
- jobflow_config = {
32
- :name => @name,
33
- :instances => {
34
- :ec2_key_name => @ec2_key_name,
35
- :hadoop_version => @hadoop_version,
36
- :instance_count => @instance_count,
37
- :master_instance_type => @master_instance_type,
38
- :slave_instance_type => @slave_instance_type,
39
- },
40
- :steps => [
41
- {
42
- :action_on_failure => "TERMINATE_JOB_FLOW",
43
- :hadoop_jar_step => {
44
- :jar => "s3://elasticmapreduce/libs/script-runner/script-runner.jar",
45
- :args => [
46
- "s3://elasticmapreduce/libs/hive/hive-script",
47
- "--base-path", "s3://elasticmapreduce/libs/hive/",
48
- "--install-hive"
49
- ],
50
- },
51
- :name => "Setup Hive"
52
- },
53
- {
54
- :action_on_failure => @action_on_failure,
55
- :hadoop_jar_step => {
56
- :jar => "s3://elasticmapreduce/libs/script-runner/script-runner.jar",
57
- :args => script_arguments,
58
- },
59
- :name => "Run Hive Script"
60
- }
61
- ]
62
- }
63
-
64
- run_job(jobflow_config)
65
- end
66
-
67
- end
68
-
69
- end