我正在创建一个自包含的Scala程序,它在某些部分使用Spark进行并行化。在我的特定情况下,Spark集群可以通过mesos获得。
我创建了这样的火花上下文:
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 env var后,使用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一样运行?