如何在自包含的 Scala Spark 程序中使用 mesos master url

How to use mesos master url in a self-contained Scala Spark program

我正在创建一个自包含的 Scala 程序,它在某些部分使用 Spark 进行并行化。在我的具体情况下,Spark集群是通过mesos获取的。

我这样创建 spark 上下文:

val conf = new SparkConf().setMaster("mesos://zk://<mesos-url1>,<mesos-url2>/spark/mesos-rtspark").setAppName("foo")
val sc = new SparkContext(conf)

我通过搜索发现你必须指定 MESOS_NATIVE_JAVA_LIBRARY env var 来指向 libmesos 库,所以当 运行我的 Scala 程序时,我这样做:

MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.dylib sbt run

但是,这会导致 SparkException:

ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Could not parse Master URL: 'mesos://zk://<mesos-url1>,<mesos-url2>/spark/mesos-rtspark'

同时,在导出 MESOS_NATIVE_JAVA_LIBRARY 环境变量后,使用 spark-submit 似乎工作正常。

MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.dylib spark-submit --class <MAIN CLASS> ./target/scala-2.10/<APP_JAR>.jar

为什么?

如何使独立程序 运行 像 spark-submit 一样?

spark-mesos 个 jar 添加到您的类路径中。