我们有一个基于Spark独立的程序,在这个程序中我们使用SparkContext
和SqlContext
来做大量的查询。
现在我们想把系统部署到运行在Yarn上的Spark上。但是当我们将spark.master
修改为yarn-cluster
时,应用程序抛出一个异常,说这只适用于spark-submit
类型。当我们切换到yarn-client
时,虽然它不再抛出异常,但它不能正常工作。
似乎如果在Yarn上运行,我们不能再使用SparkContext
来工作,相反,我们应该使用像yarn.Client
这样的东西,但这样我们就不知道如何改变我们的代码来实现我们在使用SparkContext
和SqlContext
之前所做的事情。
有解决这个问题的好方法吗?我们能从yarn.Client
得到SparkContext
吗?或者我们应该改变我们的代码来利用yarn.Client
的新接口?
谢谢!
当您在集群上运行时,您需要执行如下spark-submit
./bin/spark-submit
--class <main-class>
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
... # other options
<application-jar>
——master将是yarn——deploy-mode将是cluster
在你的应用程序中,如果你有setMaster("local[]")之类的东西,你可以删除它并构建代码。当你使用——Master yarn执行spark-submit时,yarn会为你启动容器,而不是spark-standalone调度程序。
不设置Master
,你的应用代码看起来像这样 val conf = new SparkConf().setAppName("App Name")
val sc = new SparkContext(conf)
当你想在同一台机器上从正在运行的代码启动驱动程序时,使用yarn部署模式客户端。在集群上,部署模式应该是cluster,这将确保驱动程序通过yarn在一个worker节点上启动。