Spark有native support by EMR。使用EMR Web界面创建新集群时,可以添加一个自定义步骤,在集群启动时执行Spark应用程序,基本上是集群启动后的自动spark-submit。
我一直在想如何在启动EMR集群并通过指定的EMR步骤提交jar文件时,如何在应用程序中为SparkConf指定主节点?
预先知道集群主机的IP是不可能的,如果我手动启动集群然后在调用spark-submit之前使用该信息构建到我的应用程序中的话。
代码段:
SparkConf conf = new SparkConf().setAppName("myApp").setMaster("spark:\\???:7077");
JavaSparkContext sparkContext = new JavaSparkContext(conf);
请注意,我正在询问"集群"执行模式,因此驱动程序也在集群上运行。
答案 0 :(得分:2)
简短回答:不要。
更长的答案:主屏幕网址如" spark://..."适用于Spark Standalone,但EMR在YARN上使用Spark,因此主URL应该只是" yarn"。这已在spark-defaults.conf中为您配置,因此当您运行spark-submit时,您甚至不必包含" - master ..."。
但是,由于您询问群集执行模式(实际上,它被称为"部署模式"),您可以指定" - master yarn-cluster" (已弃用)或" - 部署模式群集" (优选的)。这将使Spark驱动程序在随机群集模式下运行,而不是在EMR主机上运行。