aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authortoddwan <tawan0109@outlook.com>2015-11-30 09:26:29 +0000
committerSean Owen <sowen@cloudera.com>2015-11-30 09:26:29 +0000
commite0749442051d6e29dae4f4cdcb2937c0b015f98f (patch)
tree673da8985b6e43cc5a9e87108bb9754e540a9b7b /core
parent0ddfe7868948e302858a2b03b50762eaefbeb53e (diff)
downloadspark-e0749442051d6e29dae4f4cdcb2937c0b015f98f.tar.gz
spark-e0749442051d6e29dae4f4cdcb2937c0b015f98f.tar.bz2
spark-e0749442051d6e29dae4f4cdcb2937c0b015f98f.zip
[SPARK-11859][MESOS] SparkContext accepts invalid Master URLs in the form zk://host:port for a multi-master Mesos cluster using ZooKeeper
* According to below doc and validation logic in [SparkSubmit.scala](https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala#L231), master URL for a mesos cluster should always start with `mesos://` http://spark.apache.org/docs/latest/running-on-mesos.html `The Master URLs for Mesos are in the form mesos://host:5050 for a single-master Mesos cluster, or mesos://zk://host:2181 for a multi-master Mesos cluster using ZooKeeper.` * However, [SparkContext.scala](https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/SparkContext.scala#L2749) fails the validation and can receive master URL in the form `zk://host:port` * For the master URLs in the form `zk:host:port`, the valid form should be `mesos://zk://host:port` * This PR restrict the validation in `SparkContext.scala`, and now only mesos master URLs prefixed with `mesos://` can be accepted. * This PR also updated corresponding unit test. Author: toddwan <tawan0109@outlook.com> Closes #9886 from toddwan/S11859.
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/SparkContext.scala16
-rw-r--r--core/src/test/scala/org/apache/spark/SparkContextSchedulerCreationSuite.scala5
2 files changed, 15 insertions, 6 deletions
diff --git a/core/src/main/scala/org/apache/spark/SparkContext.scala b/core/src/main/scala/org/apache/spark/SparkContext.scala
index b030d3c71d..8a62b71c3f 100644
--- a/core/src/main/scala/org/apache/spark/SparkContext.scala
+++ b/core/src/main/scala/org/apache/spark/SparkContext.scala
@@ -2708,15 +2708,14 @@ object SparkContext extends Logging {
scheduler.initialize(backend)
(backend, scheduler)
- case mesosUrl @ MESOS_REGEX(_) =>
+ case MESOS_REGEX(mesosUrl) =>
MesosNativeLibrary.load()
val scheduler = new TaskSchedulerImpl(sc)
val coarseGrained = sc.conf.getBoolean("spark.mesos.coarse", defaultValue = true)
- val url = mesosUrl.stripPrefix("mesos://") // strip scheme from raw Mesos URLs
val backend = if (coarseGrained) {
- new CoarseMesosSchedulerBackend(scheduler, sc, url, sc.env.securityManager)
+ new CoarseMesosSchedulerBackend(scheduler, sc, mesosUrl, sc.env.securityManager)
} else {
- new MesosSchedulerBackend(scheduler, sc, url)
+ new MesosSchedulerBackend(scheduler, sc, mesosUrl)
}
scheduler.initialize(backend)
(backend, scheduler)
@@ -2727,6 +2726,11 @@ object SparkContext extends Logging {
scheduler.initialize(backend)
(backend, scheduler)
+ case zkUrl if zkUrl.startsWith("zk://") =>
+ logWarning("Master URL for a multi-master Mesos cluster managed by ZooKeeper should be " +
+ "in the form mesos://zk://host:port. Current Master URL will stop working in Spark 2.0.")
+ createTaskScheduler(sc, "mesos://" + zkUrl)
+
case _ =>
throw new SparkException("Could not parse Master URL: '" + master + "'")
}
@@ -2745,8 +2749,8 @@ private object SparkMasterRegex {
val LOCAL_CLUSTER_REGEX = """local-cluster\[\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*]""".r
// Regular expression for connecting to Spark deploy clusters
val SPARK_REGEX = """spark://(.*)""".r
- // Regular expression for connection to Mesos cluster by mesos:// or zk:// url
- val MESOS_REGEX = """(mesos|zk)://.*""".r
+ // Regular expression for connection to Mesos cluster by mesos:// or mesos://zk:// url
+ val MESOS_REGEX = """mesos://(.*)""".r
// Regular expression for connection to Simr cluster
val SIMR_REGEX = """simr://(.*)""".r
}
diff --git a/core/src/test/scala/org/apache/spark/SparkContextSchedulerCreationSuite.scala b/core/src/test/scala/org/apache/spark/SparkContextSchedulerCreationSuite.scala
index e5a14a69ef..d18e0782c0 100644
--- a/core/src/test/scala/org/apache/spark/SparkContextSchedulerCreationSuite.scala
+++ b/core/src/test/scala/org/apache/spark/SparkContextSchedulerCreationSuite.scala
@@ -175,6 +175,11 @@ class SparkContextSchedulerCreationSuite
}
test("mesos with zookeeper") {
+ testMesos("mesos://zk://localhost:1234,localhost:2345",
+ classOf[MesosSchedulerBackend], coarse = false)
+ }
+
+ test("mesos with zookeeper and Master URL starting with zk://") {
testMesos("zk://localhost:1234,localhost:2345", classOf[MesosSchedulerBackend], coarse = false)
}
}