从 Eclipse 和 Spark Context 提交 spark app 作为 yarn job 提交



我已经可以从我的Eclipse IDE提交local spark作业(用Scala编写)。但是,我想修改我的 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.

1) 根据我进行的研究,当从 Eclipse 远程提交时,您不能将yarn-cluster用作代码中的主控,而应使用 spark-client

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

检查此Cloudera资源,他们正在粉碎一些关于阻止您在集群模式下运行"交互式"应用程序的约束

2) 您可能会遇到资源未正确复制到群集的问题。在我的情况下解决问题的是将以下文件包含在项目的类路径中(没有任何幻想,现在我只是将它们复制到项目的 src/java 目录中):

  • 核心站点.xml
  • HDFS-site.xml
  • 纱线网站.xml

确保 特别是核心站点.xml 在类路径中,因为我读过的教程都没有提到它。而且你会遇到麻烦,因为如果没有fs.defaultFS配置,Spark 会认为目标目录与源目录(您的本地文件系统)相同,而不是远程 HDFS 文件系统。

相关内容

  • 没有找到相关文章