mortar 0.15.36 → 0.15.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mortar/command/base.rb +2 -2
- data/lib/mortar/command/config.rb +52 -11
- data/lib/mortar/command/jobs.rb +1 -1
- data/lib/mortar/command/local.rb +1 -136
- data/lib/mortar/command/spark.rb +26 -57
- data/lib/mortar/local/controller.rb +2 -31
- data/lib/mortar/local/pig.rb +1 -1
- data/lib/mortar/pigversion.rb +52 -43
- data/lib/mortar/version.rb +1 -1
- data/spec/mortar/command/base_spec.rb +2 -2
- data/spec/mortar/command/config_spec.rb +63 -0
- data/spec/mortar/command/describe_spec.rb +4 -4
- data/spec/mortar/command/illustrate_spec.rb +7 -7
- data/spec/mortar/command/jobs_spec.rb +61 -13
- data/spec/mortar/command/local_spec.rb +9 -234
- data/spec/mortar/command/validate_spec.rb +2 -2
- data/spec/mortar/local/controller_spec.rb +7 -41
- data/spec/mortar/local/pig_spec.rb +29 -30
- metadata +5 -8
- data/lib/mortar/local/sqoop.rb +0 -162
- data/lib/mortar/templates/script/sqoop.sh +0 -40
- data/spec/mortar/local/sqoop_spec.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15cff7085bdc1d7475ce5de63a224f1e5f9af981
|
4
|
+
data.tar.gz: e273bd6668c0752d89cef8546c1c43cdc69f1d92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c52e4a5fb9d3921626417c54aa3622d8494b81bb481155862918c05a9d1a69c3f1ceab0ac4485409533f383d2c1d1043b9c7d89293c35c27f12ade5e2d49ae7
|
7
|
+
data.tar.gz: c31c3f2135b0e592630cbf622d9815d7ccb28eb741826e203df3b11be0d427b5c936ec67e23543a5494ff1444ec1bee0eb91c990234ffe9a8d9c32d49845be84
|
data/lib/mortar/command/base.rb
CHANGED
@@ -296,7 +296,7 @@ protected
|
|
296
296
|
|
297
297
|
def self.replace_templates(help)
|
298
298
|
help.each do |line|
|
299
|
-
line.gsub!("<PIG_VERSION_OPTIONS>", "0.
|
299
|
+
line.gsub!("<PIG_VERSION_OPTIONS>", "0.12 and 0.12-Hadoop-2")
|
300
300
|
end
|
301
301
|
end
|
302
302
|
|
@@ -608,7 +608,7 @@ protected
|
|
608
608
|
end
|
609
609
|
|
610
610
|
def pig_version
|
611
|
-
pig_version_str = options[:pigversion] || '0.
|
611
|
+
pig_version_str = options[:pigversion] || '0.12'
|
612
612
|
pig_version = Mortar::PigVersion.from_string(pig_version_str)
|
613
613
|
end
|
614
614
|
|
@@ -27,21 +27,27 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
27
27
|
#
|
28
28
|
# Display the config vars for a project.
|
29
29
|
#
|
30
|
-
# -s, --shell # output config vars in shell format
|
30
|
+
# -s, --shell # output config vars in shell format.
|
31
31
|
#
|
32
32
|
#
|
33
33
|
# $ mortar config
|
34
34
|
# A: one
|
35
|
+
# B: three
|
36
|
+
#
|
37
|
+
# == Project config settings overriden by user config
|
35
38
|
# B: two
|
36
39
|
#
|
40
|
+
#
|
37
41
|
# $ mortar config --shell
|
38
42
|
# A=one
|
39
|
-
# B=
|
43
|
+
# B=three
|
40
44
|
#
|
41
45
|
def index
|
42
46
|
validate_arguments!
|
43
47
|
project_name = options[:project] || project.name
|
44
|
-
|
48
|
+
config_body = api.get_config_vars(project_name).body
|
49
|
+
vars = config_body['config']
|
50
|
+
shadow_vars = config_body['shadow_config'] || {}
|
45
51
|
if vars.empty?
|
46
52
|
display("#{project_name} has no config vars.")
|
47
53
|
else
|
@@ -53,6 +59,12 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
53
59
|
else
|
54
60
|
styled_header("#{project_name} Config Vars")
|
55
61
|
styled_hash(vars)
|
62
|
+
unless shadow_vars.empty?
|
63
|
+
shadow_vars.each {|key, value| shadow_vars[key] = value.to_s}
|
64
|
+
display("\n")
|
65
|
+
styled_header("Project config settings overriden by user config")
|
66
|
+
styled_hash(shadow_vars)
|
67
|
+
end
|
56
68
|
end
|
57
69
|
end
|
58
70
|
end
|
@@ -86,6 +98,10 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
86
98
|
#
|
87
99
|
# Set one or more config vars
|
88
100
|
#
|
101
|
+
# -u, --user # Set the config value for your user. Only visible to your user
|
102
|
+
# # and will apply to all projects. Will overwrite a project config
|
103
|
+
# # variable with the same key.
|
104
|
+
#
|
89
105
|
#Example:
|
90
106
|
#
|
91
107
|
# $ mortar config:set A=one
|
@@ -97,6 +113,11 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
97
113
|
# A: one
|
98
114
|
# B: two
|
99
115
|
#
|
116
|
+
# $ mortar config:set B=three -u
|
117
|
+
# Setting config vars... done.
|
118
|
+
# A: one
|
119
|
+
# B: three
|
120
|
+
#
|
100
121
|
def set
|
101
122
|
unless args.size > 0 and args.all? { |a| a.include?('=') }
|
102
123
|
error("Usage: mortar config:set KEY1=VALUE1 [KEY2=VALUE2 ...]\nMust specify KEY and VALUE to set.")
|
@@ -108,10 +129,15 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
108
129
|
vars
|
109
130
|
end
|
110
131
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
132
|
+
if options[:user]
|
133
|
+
action("Setting config vars for your user") do
|
134
|
+
api.put_user_config_vars(vars)
|
135
|
+
end
|
136
|
+
else
|
137
|
+
project_name = options[:project] || project.name
|
138
|
+
action("Setting config vars for project #{project_name}") do
|
139
|
+
api.put_config_vars(project_name, vars)
|
140
|
+
end
|
115
141
|
end
|
116
142
|
|
117
143
|
vars.each {|key, value| vars[key] = value.to_s}
|
@@ -125,6 +151,9 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
125
151
|
#
|
126
152
|
# unset one or more config vars
|
127
153
|
#
|
154
|
+
# -u, --user # Unset the config value for your user. Only affecsts your user
|
155
|
+
# # and will apply to all projects.
|
156
|
+
#
|
128
157
|
# $ mortar config:unset A
|
129
158
|
# Unsetting A... done
|
130
159
|
#
|
@@ -132,14 +161,26 @@ class Mortar::Command::Config < Mortar::Command::Base
|
|
132
161
|
# Unsetting A... done
|
133
162
|
# Unsetting B... done
|
134
163
|
#
|
164
|
+
# $ mortar config:unset A B -u
|
165
|
+
# Unsetting A... done
|
166
|
+
# Unsetting B... done
|
167
|
+
#
|
135
168
|
def unset
|
136
169
|
if args.empty?
|
137
170
|
error("Usage: mortar config:unset KEY1 [KEY2 ...]\nMust specify KEY to unset.")
|
138
171
|
end
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
172
|
+
if options[:user]
|
173
|
+
args.each do |key|
|
174
|
+
action("Unsetting #{key} for your user") do
|
175
|
+
api.delete_user_config_var(key)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
else
|
179
|
+
project_name = options[:project] || project.name
|
180
|
+
args.each do |key|
|
181
|
+
action("Unsetting #{key} for project #{project_name}") do
|
182
|
+
api.delete_config_var(project_name, key)
|
183
|
+
end
|
143
184
|
end
|
144
185
|
end
|
145
186
|
end
|
data/lib/mortar/command/jobs.rb
CHANGED
@@ -114,7 +114,7 @@ class Mortar::Command::Jobs < Mortar::Command::Base
|
|
114
114
|
end
|
115
115
|
|
116
116
|
unless options[:clusterid] || options[:clustersize]
|
117
|
-
clusters = api.get_clusters(
|
117
|
+
clusters = api.get_clusters(pig_version.cluster_backend).body['clusters']
|
118
118
|
|
119
119
|
largest_free_cluster = clusters.select{ |c| \
|
120
120
|
c['running_jobs'].length == 0 && c['status_code'] == Mortar::API::Clusters::STATUS_RUNNING }.
|
data/lib/mortar/command/local.rb
CHANGED
@@ -41,7 +41,7 @@ class Mortar::Command::Local < Mortar::Command::Base
|
|
41
41
|
Dir.chdir(project_root)
|
42
42
|
|
43
43
|
ctrl = Mortar::Local::Controller.new
|
44
|
-
ctrl.install_and_configure(pig_version, nil
|
44
|
+
ctrl.install_and_configure(pig_version, nil)
|
45
45
|
end
|
46
46
|
|
47
47
|
# local:run SCRIPT
|
@@ -277,139 +277,4 @@ class Mortar::Command::Local < Mortar::Command::Base
|
|
277
277
|
ctrl.run_luigi(pig_version, script, cli_parameters, project_config_params)
|
278
278
|
end
|
279
279
|
|
280
|
-
# local:sqoop_table dbtype database-name table s3-destination
|
281
|
-
#
|
282
|
-
# Export data from an RDBMS table to S3.
|
283
|
-
#
|
284
|
-
# -h, --host HOSTNAME # Database host, localhost assumed if not specified
|
285
|
-
# -u, --username USERNAME # User to log into the database with
|
286
|
-
# -p, --password PASSWORD # Password to log into the database
|
287
|
-
# -j, --jdbcdriver COM.DRIVER.BAR # Name of the JDBC driver class
|
288
|
-
# -d, --direct # Use a direct import path
|
289
|
-
# -r, --driverjar JARFILE # Path to the jar containing the jdbc driver
|
290
|
-
# -c, --jdbcconnectionstring CONNECTION_STRING # The JDBC connection string override
|
291
|
-
#
|
292
|
-
#Examples:
|
293
|
-
#
|
294
|
-
# Export from a postgres database
|
295
|
-
# $ mortar local:sqoop_table postgres mydb mytable s3://com.dbhost01/archive -u steve -p stevespassword
|
296
|
-
def sqoop_table
|
297
|
-
dbtype = shift_argument
|
298
|
-
unless dbtype
|
299
|
-
error("Usage: mortar local:sqoop_table dbtype database-name table s3-destination\nMust specify database type.")
|
300
|
-
end
|
301
|
-
physdb = shift_argument
|
302
|
-
unless physdb
|
303
|
-
error("Usage: mortar local:sqoop_table dbtype database-name table s3-destination\nMust specify database name.")
|
304
|
-
end
|
305
|
-
dbtable = shift_argument
|
306
|
-
unless dbtable
|
307
|
-
error("Usage: mortar local:sqoop_table dbtype database-name table s3-destination\nMust specify database table.")
|
308
|
-
end
|
309
|
-
s3dest = shift_argument
|
310
|
-
unless s3dest
|
311
|
-
error("Usage: mortar local:sqoop_table dbtype database-name table s3-destination\nMust specify s3 destination.")
|
312
|
-
end
|
313
|
-
validate_arguments!
|
314
|
-
|
315
|
-
dbhost = options[:host] || "localhost"
|
316
|
-
connstr = Shellwords.escape(options[:jdbcconnectionstring] || jdbc_conn(dbtype, dbhost, physdb))
|
317
|
-
|
318
|
-
ctrl = Mortar::Local::Controller.new
|
319
|
-
ctrl.sqoop_export_table(pig_version, connstr, dbtable, s3dest, options)
|
320
|
-
end
|
321
|
-
|
322
|
-
# local:sqoop_query dbtype database-name query s3-destination
|
323
|
-
#
|
324
|
-
# Export the result of an SQL query to S3.
|
325
|
-
#
|
326
|
-
# -h, --host HOSTNAME # Database host, localhost assumed if not specified
|
327
|
-
# -u, --username USERNAME # User to log into the database with
|
328
|
-
# -p, --password PASSWORD # Password to log into the database
|
329
|
-
# -j, --jdbcdriver COM.DRIVER.BAR # Name of the JDBC driver class
|
330
|
-
# -d, --direct # Use a direct import path
|
331
|
-
# -r, --driverjar JARFILE # Path to the jar containing the jdbc driver
|
332
|
-
# -c, --jdbcconnectionstring CONNECTION_STRING # The JDBC connection string override
|
333
|
-
#
|
334
|
-
#Examples:
|
335
|
-
#
|
336
|
-
# Export from a postgres database
|
337
|
-
# $ mortar local:sqoop_query postgres mydb "select user_name, id from users" s3://com.dbhost01/archive
|
338
|
-
def sqoop_query
|
339
|
-
dbtype = shift_argument
|
340
|
-
unless dbtype
|
341
|
-
error("Usage: mortar local:sqoop_query dbtype database-name query s3-destination\nMust specify database type.")
|
342
|
-
end
|
343
|
-
physdb = shift_argument
|
344
|
-
unless physdb
|
345
|
-
error("Usage: mortar local:sqoop_query dbtype database-name query s3-destination\nMust specify database name.")
|
346
|
-
end
|
347
|
-
query = shift_argument
|
348
|
-
unless query
|
349
|
-
error("Usage: mortar local:sqoop_query dbtype database-name query s3-destination\nMust specify sql query.")
|
350
|
-
end
|
351
|
-
s3dest = shift_argument
|
352
|
-
unless s3dest
|
353
|
-
error("Usage: mortar local:sqoop_query dbtype database-name query s3-destination\nMust specify s3 destination.")
|
354
|
-
end
|
355
|
-
validate_arguments!
|
356
|
-
|
357
|
-
dbhost = options[:host] || "localhost"
|
358
|
-
connstr = Shellwords.escape(options[:jdbcconnectionstring] || jdbc_conn(dbtype, dbhost, physdb))
|
359
|
-
|
360
|
-
ctrl = Mortar::Local::Controller.new
|
361
|
-
ctrl.sqoop_export_query(pig_version, connstr, query, s3dest, options)
|
362
|
-
end
|
363
|
-
|
364
|
-
# local:sqoop_incremental dbtype database-name table column value s3-destination
|
365
|
-
#
|
366
|
-
# Export all records where column is > value
|
367
|
-
#
|
368
|
-
# -h, --host HOSTNAME # Database host, localhost assumed if not specified
|
369
|
-
# -u, --username USERNAME # User to log into the database with
|
370
|
-
# -p, --password PASSWORD # Password to log into the database
|
371
|
-
# -j, --jdbcdriver COM.DRIVER.BAR # Name of the JDBC driver class
|
372
|
-
# -d, --direct # Use a direct import path
|
373
|
-
# -r, --driverjar JARFILE # Path to the jar containing the jdbc driver
|
374
|
-
# -c, --jdbcconnectionstring CONNECTION_STRING # The JDBC connection string override
|
375
|
-
#
|
376
|
-
#Examples:
|
377
|
-
#
|
378
|
-
# Export from the newest users
|
379
|
-
# $ mortar local:sqoop_incremental postgres mydb users user_id 12345 s3://com.dbhost01/archive
|
380
|
-
def sqoop_incremental
|
381
|
-
dbtype = shift_argument
|
382
|
-
unless dbtype
|
383
|
-
error("Usage: mortar local:sqoop_incremental dbtype database-name table column value s3-destination\nMust specify database type.")
|
384
|
-
end
|
385
|
-
physdb = shift_argument
|
386
|
-
unless physdb
|
387
|
-
error("Usage: mortar local:sqoop_incremental dbtype database-name table column value s3-destination\nMust specify database name.")
|
388
|
-
end
|
389
|
-
table = shift_argument
|
390
|
-
unless table
|
391
|
-
error("Usage: mortar local:sqoop_incremental dbtype database-name table column value s3-destination\nMust specify database table.")
|
392
|
-
end
|
393
|
-
column = shift_argument
|
394
|
-
unless column
|
395
|
-
error("Usage: mortar local:sqoop_incremental dbtype database-name table column value s3-destination\nMust specify column.")
|
396
|
-
end
|
397
|
-
max_value = shift_argument
|
398
|
-
unless max_value
|
399
|
-
error("Usage: mortar local:sqoop_incremental dbtype database-name table column value s3-destination\nMust specify value.")
|
400
|
-
end
|
401
|
-
s3dest = shift_argument
|
402
|
-
unless s3dest
|
403
|
-
error("Usage: mortar local:sqoop_incremental dbtype database-name table column value s3-destination\nMust specify s3 destination.")
|
404
|
-
end
|
405
|
-
validate_arguments!
|
406
|
-
|
407
|
-
dbhost = options[:host] || "localhost"
|
408
|
-
connstr = Shellwords.escape(options[:jdbcconnectionstring] || jdbc_conn(dbtype, dbhost, physdb))
|
409
|
-
|
410
|
-
ctrl = Mortar::Local::Controller.new
|
411
|
-
ctrl.sqoop_export_incremental(pig_version, connstr, table, column, max_value, s3dest, options)
|
412
|
-
end
|
413
|
-
|
414
|
-
|
415
280
|
end
|
data/lib/mortar/command/spark.rb
CHANGED
@@ -17,56 +17,44 @@
|
|
17
17
|
require "mortar/command/base"
|
18
18
|
require "time"
|
19
19
|
|
20
|
-
# run spark jobs
|
20
|
+
# run spark jobs using Spark Job Server
|
21
21
|
#
|
22
22
|
class Mortar::Command::Spark < Mortar::Command::Base
|
23
23
|
|
24
24
|
include Mortar::Git
|
25
25
|
|
26
|
-
# spark
|
26
|
+
# spark CLASS_NAME
|
27
27
|
#
|
28
|
-
# Run a spark job.
|
28
|
+
# Run a spark job on a spark jobserver.
|
29
29
|
#
|
30
|
-
# -c, --clusterid CLUSTERID # Run job on an existing cluster with ID of CLUSTERID (
|
31
|
-
# -s, --clustersize NUMNODES # Run job
|
32
|
-
# -
|
33
|
-
# -2, --permanentcluster # Don't automatically stop the cluster after it has been idle for an hour (Default: false--cluster will be shut down after 1 hour of inactivity)
|
34
|
-
# -3, --spot # Use spot instances for this cluster (Default: false, only applicable to new clusters)
|
30
|
+
# -c, --clusterid CLUSTERID # Run job on an existing cluster with ID of CLUSTERID (Default: runs on an existing available cluster)
|
31
|
+
# -s, --clustersize NUMNODES # Run job with NUMNODES nodes (optional; must be >= 2 if provided)
|
32
|
+
# -3, --spot # Use spot instances for this cluster (Default: true)
|
35
33
|
# -P, --project PROJECTNAME # Use a project that is not checked out in the current directory. Runs code from project's master branch in GitHub rather than snapshotting local code.
|
36
34
|
# -B, --branch BRANCHNAME # Used with --project to specify a non-master branch
|
37
35
|
#
|
38
36
|
# Examples:
|
39
37
|
#
|
40
|
-
# Run
|
41
|
-
# $ mortar spark
|
38
|
+
# Run a spark job:
|
39
|
+
# $ mortar spark com.datadog.some.Job
|
42
40
|
#
|
43
|
-
# Run
|
44
|
-
# $ mortar spark
|
41
|
+
# Run a spark job with some arguments:
|
42
|
+
# $ mortar spark com.datadog.some.Job --env prod s3://your-bucket/input s3://your-bucket/output 100
|
45
43
|
#
|
46
44
|
def index
|
47
|
-
|
48
|
-
unless
|
49
|
-
error("Usage: mortar spark
|
45
|
+
class_name = shift_argument
|
46
|
+
unless class_name
|
47
|
+
error("Usage: mortar spark CLASS_NAME\nMust specify CLASS_NAME.")
|
50
48
|
end
|
51
|
-
|
49
|
+
|
52
50
|
if options[:project]
|
53
51
|
project_name = options[:project]
|
54
52
|
else
|
55
53
|
project_name = project.name
|
56
|
-
script = validate_sparkscript!(script_name)
|
57
|
-
script_name = script.name
|
58
54
|
end
|
59
55
|
|
60
56
|
script_arguments = spark_script_arguments()
|
61
57
|
|
62
|
-
if options[:clusterid]
|
63
|
-
[:clustersize, :singlejobcluster, :permanentcluster].each do |opt|
|
64
|
-
unless options[opt].nil?
|
65
|
-
error("Option #{opt.to_s} cannot be set when running a job on an existing cluster (with --clusterid option)")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
58
|
if options[:project]
|
71
59
|
if options[:branch]
|
72
60
|
git_ref = options[:branch]
|
@@ -78,46 +66,27 @@ class Mortar::Command::Spark < Mortar::Command::Base
|
|
78
66
|
end
|
79
67
|
|
80
68
|
unless options[:clusterid] || options[:clustersize]
|
81
|
-
clusters = api.get_clusters(Mortar::API::Jobs::
|
69
|
+
clusters = api.get_clusters(Mortar::API::Jobs::CLUSTER_BACKEND__EMR_SPARK_JOBSERVER).body['clusters']
|
82
70
|
|
83
71
|
largest_free_cluster = clusters.select{ |c| \
|
84
72
|
c['running_jobs'].length == 0 && c['status_code'] == Mortar::API::Clusters::STATUS_RUNNING }.
|
85
73
|
max_by{|c| c['size']}
|
86
|
-
|
74
|
+
|
87
75
|
if largest_free_cluster.nil?
|
88
|
-
|
89
|
-
display("Defaulting to running job on new cluster of size 2")
|
90
|
-
else
|
91
|
-
options[:clusterid] = largest_free_cluster['cluster_id']
|
92
|
-
display("Defaulting to running job on largest existing free cluster, id = " +
|
93
|
-
largest_free_cluster['cluster_id'] + ", size = " + largest_free_cluster['size'].to_s)
|
76
|
+
error('No running clusters with Spark Job Server detected, please, launch a SparkJobServer cluster first')
|
94
77
|
end
|
78
|
+
|
79
|
+
options[:clusterid] = largest_free_cluster['cluster_id']
|
80
|
+
display("Defaulting to running job on largest existing free cluster, id = " +
|
81
|
+
largest_free_cluster['cluster_id'] + ", size = " + largest_free_cluster['size'].to_s)
|
95
82
|
end
|
96
83
|
|
97
84
|
response = action("Requesting job execution") do
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
cluster_type = Mortar::API::Jobs::CLUSTER_TYPE__PERSISTENT
|
104
|
-
if options[:singlejobcluster]
|
105
|
-
cluster_type = Mortar::API::Jobs::CLUSTER_TYPE__SINGLE_JOB
|
106
|
-
elsif options[:permanentcluster]
|
107
|
-
cluster_type = Mortar::API::Jobs::CLUSTER_TYPE__PERMANENT
|
108
|
-
end
|
109
|
-
use_spot_instances = options[:spot] || false
|
110
|
-
api.post_spark_job_new_cluster(project_name, script_name, git_ref, cluster_size,
|
111
|
-
:project_script_path => script.rel_path,
|
112
|
-
:script_arguments => script_arguments,
|
113
|
-
:cluster_type => cluster_type,
|
114
|
-
:use_spot_instances => use_spot_instances).body
|
115
|
-
else
|
116
|
-
cluster_id = options[:clusterid]
|
117
|
-
api.post_spark_job_existing_cluster(project_name, script_name, git_ref, cluster_id,
|
118
|
-
:project_script_path => script.rel_path,
|
119
|
-
:script_arguments => script_arguments).body
|
120
|
-
end
|
85
|
+
cluster_id = options[:clusterid]
|
86
|
+
api.post_spark_job_on_jobserver(project_name, class_name, git_ref, cluster_id,
|
87
|
+
:script_arguments => script_arguments,
|
88
|
+
:clustersize => options[:clustersize]
|
89
|
+
).body
|
121
90
|
end
|
122
91
|
|
123
92
|
display("job_id: #{response['job_id']}")
|
@@ -19,7 +19,6 @@ require "mortar/local/pig"
|
|
19
19
|
require "mortar/local/java"
|
20
20
|
require "mortar/local/python"
|
21
21
|
require "mortar/local/jython"
|
22
|
-
require "mortar/local/sqoop"
|
23
22
|
|
24
23
|
|
25
24
|
class Mortar::Local::Controller
|
@@ -118,14 +117,14 @@ EOF
|
|
118
117
|
end
|
119
118
|
# Main entry point to perform installation and configuration necessary
|
120
119
|
# to run pig on the users local machine
|
121
|
-
def install_and_configure(pig_version=nil, command=nil
|
120
|
+
def install_and_configure(pig_version=nil, command=nil)
|
122
121
|
#To support old watchtower plugins we'll accept nil pig_version
|
123
122
|
base = Mortar::Command::Base.new
|
124
123
|
set_project_name(base)
|
125
124
|
require_aws_keys()
|
126
125
|
|
127
126
|
if pig_version.nil?
|
128
|
-
pig_version = Mortar::PigVersion::
|
127
|
+
pig_version = Mortar::PigVersion::Pig012.new
|
129
128
|
end
|
130
129
|
|
131
130
|
java = Mortar::Local::Java.new()
|
@@ -154,11 +153,6 @@ EOF
|
|
154
153
|
jy = Mortar::Local::Jython.new()
|
155
154
|
jy.install_or_update()
|
156
155
|
|
157
|
-
if install_sqoop
|
158
|
-
sqoop = Mortar::Local::Sqoop.new()
|
159
|
-
sqoop.install_or_update()
|
160
|
-
end
|
161
|
-
|
162
156
|
write_local_readme
|
163
157
|
|
164
158
|
ensure_local_install_dirs_in_gitignore
|
@@ -245,27 +239,4 @@ README
|
|
245
239
|
py.run_luigi_script(luigi_script, luigi_script_parameters)
|
246
240
|
end
|
247
241
|
|
248
|
-
def sqoop_export_table(pig_version, connstr, dbtable, s3dest, options)
|
249
|
-
install_and_configure(pig_version, 'sqoop', true)
|
250
|
-
sqoop = Mortar::Local::Sqoop.new()
|
251
|
-
options[:dbtable] = dbtable
|
252
|
-
sqoop.export(connstr, s3dest, options)
|
253
|
-
end
|
254
|
-
|
255
|
-
def sqoop_export_query(pig_version, connstr, query, s3dest, options)
|
256
|
-
install_and_configure(pig_version, 'sqoop', true)
|
257
|
-
sqoop = Mortar::Local::Sqoop.new()
|
258
|
-
options[:sqlquery] = sqoop.prep_query(query)
|
259
|
-
sqoop.export(connstr, s3dest, options)
|
260
|
-
end
|
261
|
-
|
262
|
-
def sqoop_export_incremental(pig_version, connstr, dbtable, column, max_value, s3dest, options)
|
263
|
-
install_and_configure(pig_version, 'sqoop', true)
|
264
|
-
sqoop = Mortar::Local::Sqoop.new()
|
265
|
-
options[:dbtable] = dbtable
|
266
|
-
options[:inc_column] = column
|
267
|
-
options[:inc_value] = max_value
|
268
|
-
sqoop.export(connstr, s3dest, options)
|
269
|
-
end
|
270
|
-
|
271
242
|
end
|