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

时间:2016-01-27 05:02:38

标签: apache-spark yarn

我已经可以从Eclipse IDE提交AssertOpenGL; screenNo = max(Screen('Screens')); screenRes = [0 0 640 480]; Screen('Preference', 'SkipSyncTests', 2); ListenChar(2); [win, rect] = Screen('OpenWindow', screenNo, [0 0 0], screenRes); [width, height]=Screen('WindowSize', win); [x,y] = RectCenter(rect); % compute poly coordinates polyWidth = 250; polyHeight = 250; xCoord = [x, x - (polyWidth/2), x, x + (polyWidth/2)]'; yCoord = [y + (polyHeight /2), y, y - (polyHeight /2), y]'; polyCoords = [xCoord yCoord]; Screen('FramePoly', win, [255 255 255], polyCoords, 3); Screen('Flip', win); KbWait; sca; 个火花作业(用Scala编写)。但是,我想修改我的Spark上下文(在我的应用程序中),这样当我' Run'应用程序(在Eclipse内部),作业将使用Yarn作为资源管理器发送到我的远程集群。

使用local,我可以成功将作业提交到群集: spark-submit

我想在IDE中实现相同的结果。 我的sbt配置(app根目录)看起来像: spark-submit --class <main class> --master yarn-cluster <jar> 在我的应用内: 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")

1 个答案:

答案 0 :(得分:3)

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

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

检查这个Cloudera资源,他们正在粉碎可能存在的约束,阻止您在群集模式下运行“交互式”应用程序。

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

  • core-site.xml
  • HDFS-site.xml中
  • 纱-site.xml中

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