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);
请注意,我询问的是“集群”执行模式,因此驱动程序也在集群上运行。
最佳答案
简短的回答:不要。
更长的答案:像“spark://...”这样的主 URL 用于 Spark Standalone,但 EMR 在 YARN 上使用 Spark,所以主 URL 应该只是“yarn”。这已在 spark-defaults.conf 中为您配置,因此当您运行 spark-submit 时,您甚至不必包含“--master ...”。
但是,由于您询问的是集群执行模式(实际上,它称为“部署模式”),您可以指定“--master yarn-cluster”(已弃用)或“--deploy-mode cluster”(首选)。这将使 Spark 驱动程序以随机集群模式运行,而不是在 EMR 主节点上运行。
关于apache-spark - 在 amazon emr 上运行时要指定什么作为 spark master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061857/