如果Spark在Yarn上运行,如何获得SparkContext?

时间:2015-08-18 12:23:25

标签: apache-spark yarn apache-spark-sql

我们有一个基于Spark独立的程序,在这个程序中我们使用SqlContextspark.master来进行大量查询。

现在我们要在一个运行在Yarn上的Spark上部署系统。但是当我们将yarn-cluster修改为spark-submit时,应用程序会抛出一个异常,说这只适用于yarn-client类型。当我们切换到SparkContext时,虽然它不再抛出异常,但它无法正常工作。

似乎如果在Yarn上运行,我们就不能再使用yarn.Client来工作,而是应该使用类似SparkContext的东西,但这样我们就不知道如何更改代码在使用SqlContextSparkContext之前完成我们所做的工作。

有没有好办法解决这个问题?我们可以从yarn.Client获取yarn.Client,还是应该更改我们的代码以使用<x a="5"> abc </x> 的新接口?

谢谢!

1 个答案:

答案 0 :(得分:1)

当你在群集上运行时,你需要像这样做一个spark-submit

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \

- 主人将是纱线 --deploy-mode将是集群

在你的应用程序中,如果你有类似setMaster(“local []”)的东西,你可以删除它并构建代码。当您使用--Master纱线进行火花提交时,纱线将为您启动容器而不是火花独立调度程序。

您的应用代码可能看起来像没有任何Master

的设置
 val conf = new SparkConf().setAppName("App Name")
 val sc = new SparkContext(conf)

纱线部署模式客户端用于在代码运行时在同一台机器上启动驱动程序。在集群上,部署模式应该是集群,这将确保通过yarn在其中一个工作节点上启动驱动程序。