从Eclipse中将Spark应用程序提交为YARN作业以及Spark Context

6
我已经可以从我的Eclipse IDE中提交本地Scala编写的Spark作业。但是,我想修改我的应用程序内的Spark上下文,以便当我在Eclipse中“运行”应用程序时,作业将使用Yarn作为资源管理器发送到我的远程集群。spark-submit成功将作业提交到集群,命令如下: spark-submit --class <main class> --master yarn-cluster <jar>。我希望在IDE内实现相同的结果。
我的sbt配置(应用程序根目录)如下: libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.1" libraryDependencies += "org.apache.spark" %% "spark-yarn" % "1.5.1" % "provided" 在我的应用程序中: val conf = new SparkConf().setAppName("xxx").setMaster("yarn-cluster") 然而,我遇到了以下错误:Detected yarn-cluster mode, but isn't running on a cluster. Deployment to YARN is not supported directly by SparkContext. Please use spark-submit.

嗨,尼尔,我也遇到了同样的问题,你能解决这个问题吗? - Mahesh
1个回答

4

1) 根据我所进行的研究,当从Eclipse远程提交代码时,不能将yarn-cluster用作主节点,应使用spark-client代替。

new SparkConf().setAppName("test-app").setMaster("yarn-client");

请查阅Cloudera资源,他们详细解释了在集群模式下运行“交互式”应用程序时可能遇到的限制。

2) 您可能会遇到资源未正确复制到集群中的问题。在我的情况下解决该问题的方法是将以下文件包括在项目的类路径中(现在只需将它们复制到项目的src / java目录中,不需要任何特殊处理):

  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml

请确保特别是依赖于fs.defaultFS配置的core-site.xml已在类路径中,因为我阅读的教程都没有提到这一点,您将遇到麻烦,因为Spark将认为目标目录与源(本地文件系统)相同,而不是远程HDFS文件系统。


亲爱的Serhiy,我有同样的问题,我的IDE是Eclipse。但我无法解决这个问题。而且我不能完全理解您将配置文件添加到classpath的意图。您能给我更多的解释吗?谢谢。 - user2352554

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接