如何在独立模式下更轻松地将Jar部署到Spark Cluster?

时间:2014-06-05 06:16:30

标签: jar apache-spark

我有一个包含3台机器的小型集群,以及另一台用于开发和测试的机器。开发时,我将SparkContext设置为local。当一切正常时,我想将我构建的Jar文件部署到每个节点。基本上我手动将此jar移动到群集并复制到群集共享的HDFS。然后我可以将代码更改为:

//standalone mode
val sc = new SparkContext(
     "spark://mymaster:7077", 
     "Simple App", 
     "/opt/spark-0.9.1-bin-cdh4",   //spark home
     List("hdfs://namenode:8020/runnableJars/SimplyApp.jar") //jar location
) 

在我的IDE中运行它。我的问题:有没有办法更容易将这个jar移动到集群?

1 个答案:

答案 0 :(得分:23)

在Spark中,创建SparkContext的程序称为“驱动程序”。只需将您的作业的jar文件提供给驱动程序的本地文件系统就足以将其提取并将其发送给主/工作人员。

具体来说,您的配置将如下所示:

//favor using Spark Conf to configure your Spark Context
val conf = new SparkConf()
             .setMaster("spark://mymaster:7077")
             .setAppName("SimpleApp")
             .set("spark.local.ip", "172.17.0.1")
             .setJars(Array("/local/dir/SimplyApp.jar"))

val sc = new SparkContext(conf)

在引擎盖下,驱动程序将启动一个服务器,工作人员将从驱动程序下载jar文件。因此,工作人员可以通过网络访问驱动程序,这一点很重要(通常也是一个问题)。这通常可以通过在可从工作人员访问/路由的网络中的驱动程序上设置'spark.local.ip'来确保。