使用Yarn的Spark Shell - 错误:Yarn应用程序已经结束!它可能已被终止或无法启动应用程序主节点。

8
作为this问题的后续,当我尝试在我的单节点机器上使用Spark 2.1.1覆盖Yarn(Hadoop 2.8.0)时,我遇到了一个新的错误。如果我使用以下命令启动Spark Shell:
spark-shell

它可以顺利启动。使用通常的start-dfs.shstart-yarn.sh启动Hadoop后,如果我使用

spark-shell --master yarn

我得到了以下错误:
17/06/10 12:00:07 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/06/10 12:00:12 ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.
    at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.waitForApplication(YarnClientSchedulerBackend.scala:85)
    at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:62)
    at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:156)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:509)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2320)
    at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:868)
    at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:860)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)
    at org.apache.spark.repl.Main$.createSparkSession(Main.scala:96)
    at $line3.$read$$iw$$iw.<init>(<console>:15)
    at $line3.$read$$iw.<init>(<console>:42)
    at $line3.$read.<init>(<console>:44)
    at $line3.$read$.<init>(<console>:48)
    at $line3.$read$.<clinit>(<console>)
    at $line3.$eval$.$print$lzycompute(<console>:7)
    at $line3.$eval$.$print(<console>:6)
    at $line3.$eval.$print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:786)
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:1047)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:638)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:637)
    at scala.reflect.internal.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
    at scala.reflect.internal.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:637)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:569)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:565)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:807)
    at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:681)
    at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:395)
    at org.apache.spark.repl.SparkILoop$$anonfun$initializeSpark$1.apply$mcV$sp(SparkILoop.scala:38)
    at org.apache.spark.repl.SparkILoop$$anonfun$initializeSpark$1.apply(SparkILoop.scala:37)
    at org.apache.spark.repl.SparkILoop$$anonfun$initializeSpark$1.apply(SparkILoop.scala:37)
    at scala.tools.nsc.interpreter.IMain.beQuietDuring(IMain.scala:214)
    at org.apache.spark.repl.SparkILoop.initializeSpark(SparkILoop.scala:37)
    at org.apache.spark.repl.SparkILoop.loadFiles(SparkILoop.scala:105)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:920)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
    at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:909)
    at org.apache.spark.repl.Main$.doMain(Main.scala:69)
    at org.apache.spark.repl.Main$.main(Main.scala:52)
    at org.apache.spark.repl.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:743)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
17/06/10 12:00:12 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Attempted to request executors before the AM has registered!
17/06/10 12:00:12 WARN MetricsSystem: Stopping a MetricsSystem that is not running

我对Spark/Yarn很陌生,不知道该去哪里寻找解决方案。我尝试了这里提出的建议(因为我使用的是Java 8,看起来是相似的问题),但没有任何效果。我还尝试使用Java 7(将JAVA_HOME变量设置为JDK 7安装文件夹),但仍然遇到了同样的错误。你有什么想法吗?


@RameshMaharjan 我认为不带参数的 spark−shell 是指让 Spark 在“独立”模式下工作。你是说设置这些变量等同于给出参数 −−master yarn 吗?我应该在 spark−env.sh 中设置它们吗? - Alessandro
如果您不定义这些变量,则为独立模式,但如果您定义了它们,则为Yarn模式。您应将其定义为环境变量,即如果您使用Linux,则在.bashrc文件中。这就是您其他问题的答案所建议的。 - Ramesh Maharjan
1
@RameshMaharjan 那么什么时候应该使用 --master yarn 呢? - Alessandro
1
@RameshMaharjan 抱歉如果我有点固执,但是这里给出了一个使用spark−shell−−master yarn的示例。这是用来做什么的?感谢您的耐心。 - Alessandro
https://dev59.com/jlUL5IYBdhLWcg3waXYr - Sunil N
显示剩余3条评论
4个回答

4
我使用与Liming Cen在这个类似的问题的答案中描述的方法基本相同的方法成功解决了问题。唯一的区别是我将$SPARK_HOME/libexec/jars目录下的所有JAR文件压缩成一个zip文件并添加到我的HDFS中。
然后,在$SPARK_HOME/libexec/conf/spark-defaults.conf中添加了以下行:

spark.yarn.archive=hdfs:///user/MY_USERNAME/spark-archive.zip


1

有可能是由于所有YARN节点未正确安装/配置Java 1.8导致的...如果您使用的是Cloudera,您必须确保在特定主机的“配置”选项卡中为所有主机正确配置了“Java Home Directory”属性(例如:/usr/lib/jvm/jdk1.8.0_144)。


0

对我来说,在 YARN Nodemanager 节点上缺少了一些 HDFS 库, 因此在 YARN NodeManager VM 上安装 hadoop-hdfs 和 hadoop-client 包后,问题得到解决。

yum -y install hadoop-client.x86_64 hadoop-hdfs.x86_64

-1

你可以使用 --master-yarn 在 yarn 上运行 spark-shell。然而,要运行 spark-shell,你必须使用“deploy-mode client”,因为在 spark shell 的情况下,驱动程序将在客户端上运行。尝试这个方法,如果出现错误,请发帖说明。

./bin/spark-shell --master yarn --deploy-mode client

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