我想开发一个Scala应用程序,它连接一个主程序并运行一段代码。我想在不使用spark-submit的情况下实现这一点。这可能吗?特别是我想知道以下代码是否可以从我的机器上运行并连接到集群:
val conf = new SparkConf()
.setAppName("Meisam")
.setMaster("yarn-client")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val df = sqlContext.sql("SELECT * FROM myTable")
...
添加一个conf
val conf = new SparkConf()
.setAppName("Meisam")
.setMaster("yarn-client")
.set("spark.driver.host", "127.0.0.1");
是的,在YARN集群上以客户端部署模式(驱动程序在应用程序运行的机器上运行)运行任务是可能的,而且基本上你所做的就是所有需要的。
spark-submit
可以帮助您在代码中保留一些正确执行所需的SparkConf
设置,如主URL。当您的代码不包含低级细节时,您可以在任何Spark集群上部署您的Spark应用程序——YARN、Mesos、Spark Standalone和本地——而无需重新编译它们。
与这里所说的相反,我认为这只是部分可能的,因为我最近发现了一条艰难的道路,成为我这样的Spark新手。虽然你肯定可以连接到上面提到的集群并在上面运行代码,但当你开始做任何无关紧要的事情时,你可能会遇到问题,甚至是像使用UDF(用户定义的函数,也就是Spark中尚未包含的任何函数)这样简单的东西。看看这里https://issues.apache.org/jira/browse/SPARK-18075,以及其他相关的门票,最重要的是,在回复中。此外,这似乎很有用(现在来看一下):从Eclipse和spark Context 将spark应用程序作为一个纱线作业提交