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



我们有一个基于Spark独立的程序,在这个程序中我们使用SparkContextSqlContext来做大量的查询。

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

似乎如果在Yarn上运行,我们不能再使用SparkContext来工作,相反,我们应该使用像yarn.Client这样的东西,但这样我们就不知道如何改变我们的代码来实现我们在使用SparkContextSqlContext之前所做的事情。

有解决这个问题的好方法吗?我们能从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节点上启动。

相关内容

  • 没有找到相关文章

最新更新