我想开发一个Scala应用程序,它连接一个master并运行一段代码。我想在不使用spark-submit的情况下实现这一点。这可能吗?特别是我想知道以下代码是否可以从我的机器运行并连接到集群:
private List<String> list = {"a", "b", "c", "d"}
private static String repeatAlphabet(String alphabet, int repeatCount) {
return StringUtils.repeat(alphabet, repeatCount);
}
void Map<String, String> foo(int repeatCount) {
Map<String, String> map = Maps.newHashMap();
for (String alphabet : list) {
map.put(alphabet, repeatAlphabet(alphabet, repeatCount));
}
return map;
}
答案 0 :(得分:7)
添加conf
val conf = new SparkConf()
.setAppName("Meisam")
.setMaster("yarn-client")
.set("spark.driver.host", "127.0.0.1");
答案 1 :(得分:4)
是的,这是可能的,基本上你所做的就是在客户端部署模式下在YARN集群上运行任务所需的一切(驱动程序在应用程序运行的机器上运行)。
spark-submit
可帮助您保留代码,使其免于正确执行所需的少量SparkConf
设置,例如主URL。当您保持代码不受低级细节影响时,您可以在任何Spark集群(YARN,Mesos,Spark Standalone和本地)上部署Spark应用程序,而无需重新编译它们。
答案 2 :(得分:1)
与此处所说的相反,我认为这只是部分可能,因为我最近发现了艰难的方式,就像我的Spark新手一样。虽然如上所述肯定可以连接到集群并在其上运行代码,但是当你开始做任何非常重要的事情时,你可能会遇到问题,甚至像使用UDF那样简单(用户定义的函数,AKA任何东西)尚未包含在Spark中)。看看https://issues.apache.org/jira/browse/SPARK-18075,以及其他相关的门票,最重要的是,在回复中。 此外,这似乎很有用(现在看一下):Submitting spark app as a yarn job from Eclipse and Spark Context