-
Notifications
You must be signed in to change notification settings - Fork 29k
[SPARK-24319][SPARK SUBMIT] Fix spark-submit execution where no main class is required. #21450
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 6 commits
a69850b
9052dff
12a5145
b03e3de
d5a9ca3
8a8067e
5a737d7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -18,6 +18,7 @@ | |
| package org.apache.spark.launcher; | ||
|
|
||
| import java.io.File; | ||
| import java.util.ArrayList; | ||
| import java.util.Arrays; | ||
| import java.util.Collections; | ||
| import java.util.HashMap; | ||
|
|
@@ -27,14 +28,20 @@ | |
|
|
||
| import org.junit.AfterClass; | ||
| import org.junit.BeforeClass; | ||
| import org.junit.Rule; | ||
| import org.junit.Test; | ||
| import org.junit.rules.ExpectedException; | ||
|
|
||
| import static org.junit.Assert.*; | ||
|
|
||
| public class SparkSubmitCommandBuilderSuite extends BaseSuite { | ||
|
|
||
| private static File dummyPropsFile; | ||
| private static SparkSubmitOptionParser parser; | ||
|
|
||
| @Rule | ||
| public ExpectedException expectedException = ExpectedException.none(); | ||
|
|
||
| @BeforeClass | ||
| public static void setUp() throws Exception { | ||
| dummyPropsFile = File.createTempFile("spark", "properties"); | ||
|
|
@@ -74,8 +81,11 @@ public void testCliHelpAndNoArg() throws Exception { | |
|
|
||
| @Test | ||
| public void testCliKillAndStatus() throws Exception { | ||
| testCLIOpts(parser.STATUS); | ||
| testCLIOpts(parser.KILL_SUBMISSION); | ||
| List<String> params = Arrays.asList("driver-20160531171222-0000"); | ||
| testCLIOpts(null, parser.STATUS, params); | ||
| testCLIOpts(null, parser.KILL_SUBMISSION, params); | ||
| testCLIOpts(SparkSubmitCommandBuilder.RUN_EXAMPLE, parser.STATUS, params); | ||
| testCLIOpts(SparkSubmitCommandBuilder.RUN_EXAMPLE, parser.KILL_SUBMISSION, params); | ||
| } | ||
|
|
||
| @Test | ||
|
|
@@ -190,6 +200,33 @@ public void testSparkRShell() throws Exception { | |
| env.get("SPARKR_SUBMIT_ARGS")); | ||
| } | ||
|
|
||
| @Test(expected = IllegalArgumentException.class) | ||
| public void testExamplesRunnerNoArg() throws Exception { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When no args are given this is what I get as the output: It doesn't really make sense asking for a primary resource when running an example, how about just printing usage? This is what spark-submit does with no args
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right, the output should make sense also. When the launcher library detects an invalid command it should be running Seems that's not exactly what's happening here.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Now it prints out the usage. |
||
| List<String> sparkSubmitArgs = Arrays.asList(SparkSubmitCommandBuilder.RUN_EXAMPLE); | ||
| Map<String, String> env = new HashMap<>(); | ||
| buildCommand(sparkSubmitArgs, env); | ||
| } | ||
|
|
||
| @Test | ||
| public void testExamplesRunnerNoMainClass() throws Exception { | ||
| testCLIOpts(SparkSubmitCommandBuilder.RUN_EXAMPLE, parser.HELP, null); | ||
| testCLIOpts(SparkSubmitCommandBuilder.RUN_EXAMPLE, parser.USAGE_ERROR, null); | ||
| testCLIOpts(SparkSubmitCommandBuilder.RUN_EXAMPLE, parser.VERSION, null); | ||
| } | ||
|
|
||
| @Test | ||
| public void testExamplesRunnerWithMasterNoMainClass() throws Exception { | ||
| expectedException.expect(IllegalArgumentException.class); | ||
| expectedException.expectMessage("Missing example class name."); | ||
|
|
||
| List<String> sparkSubmitArgs = Arrays.asList( | ||
| SparkSubmitCommandBuilder.RUN_EXAMPLE, | ||
| parser.MASTER + "=foo" | ||
| ); | ||
| Map<String, String> env = new HashMap<>(); | ||
| buildCommand(sparkSubmitArgs, env); | ||
| } | ||
|
|
||
| @Test | ||
| public void testExamplesRunner() throws Exception { | ||
| List<String> sparkSubmitArgs = Arrays.asList( | ||
|
|
@@ -344,10 +381,17 @@ private List<String> buildCommand(List<String> args, Map<String, String> env) th | |
| return newCommandBuilder(args).buildCommand(env); | ||
| } | ||
|
|
||
| private void testCLIOpts(String opt) throws Exception { | ||
| List<String> helpArgs = Arrays.asList(opt, "driver-20160531171222-0000"); | ||
| private void testCLIOpts(String appResource, String opt, List<String> params) throws Exception { | ||
| List<String> args = new ArrayList<>(); | ||
| if (appResource != null) { | ||
| args.add(appResource); | ||
| } | ||
| args.add(opt); | ||
| if (params != null) { | ||
| args.addAll(params); | ||
| } | ||
| Map<String, String> env = new HashMap<>(); | ||
| List<String> cmd = buildCommand(helpArgs, env); | ||
| List<String> cmd = buildCommand(args, env); | ||
| assertTrue(opt + " should be contained in the final cmd.", | ||
| cmd.contains(opt)); | ||
| } | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The style is to double indent parameter lists... when in doubt, look at the rest of the code, not the style guide.