Spark-Shell启动报错:Yarn应用已终止及日志路径咨询
问题
我们安装了Hadoop 2.7.4和Spark 2.2.1,执行spark-shell命令时出现以下错误:
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:173) at org.apache.spark.SparkContext.<init>(SparkContext.scala:509) at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:236) at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80) at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69) at py4j.GatewayConnection.run(GatewayConnection.java:214) at java.lang.Thread.run(Thread.java:750) 23/05/01 08:22:26 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Attempted to request executors before the AM has registered! 23/05/01 08:22:26 WARN MetricsSystem: Stopping a MetricsSystem that is not running Traceback (most recent call last): ", line 400, in <module> .config('spark.debug.maxToStringFields', 1000) File "/opt/spark/python/lib/pyspark.zip/pyspark/sql/session.py", line 173, in getOrCreate File "/opt/spark/python/lib/pyspark.zip/pyspark/context.py", line 334, in getOrCreate File "/opt/spark/python/lib/pyspark.zip/pyspark/context.py", line 118, in __init__ File "/opt/spark/python/lib/pyspark.zip/pyspark/context.py", line 180, in _do_init File "/opt/spark/python/lib/pyspark.zip/pyspark/context.py", line 273, in _initialize_context File "/opt/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1401, in __call__ File "/opt/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext. : 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:173) at org.apache.spark.SparkContext.<init>(SparkContext.scala:509) at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at the sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:236) at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80) at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69) at py4j.GatewayConnection.run(GatewayConnection.java:214) at java.lang.Thread.run(Thread.java:750) Build step 'Execute shell' marked build as failure Finished: FAILURE
请问该错误的可能原因是什么?另外无法找到服务器上的准确日志,能否告知日志的具体路径?
可能原因
- YARN资源不足:NodeManager没有足够的内存或CPU分配给Application Master,导致进程启动失败被系统杀死
- 版本兼容细节冲突:虽然Hadoop 2.7.4与Spark 2.2.1官方标注兼容,但可能存在配置文件或依赖库的细微冲突
- 环境变量配置错误:
HADOOP_CONF_DIR未正确设置,导致Spark无法读取YARN的核心配置(如ResourceManager地址、队列设置) - Application Master启动异常:可能是Spark运行用户无YARN队列权限、依赖库缺失,或是NodeManager与Application Master之间存在网络端口不通的问题
- Spark资源参数不合理:提交命令中设置的
spark.driver.memory、spark.executor.memory超出YARN配置的单个容器资源上限,导致应用被拒绝
日志路径说明
YARN应用相关日志
- 通过命令快速查看:先通过
yarn application -list -appStates FAILED获取失败应用的ID,再执行yarn logs -applicationId <应用ID>即可查看对应Application Master和Executor的日志 - 本地存储路径:默认在YARN配置
yarn.nodemanager.log-dirs指定的目录下,通常是/var/log/hadoop-yarn/containers,每个应用的日志存放在以容器ID命名的子目录中
Spark Driver日志
- 本地提交模式下,日志直接输出在
spark-shell的控制台中 - YARN集群模式下,Driver日志会合并到Application Master的日志中,可通过上述YARN日志命令查看
Hadoop YARN服务日志
- ResourceManager日志:默认路径为
$HADOOP_HOME/logs/yarn-<用户名>-resourcemanager-<主机名>.log - NodeManager日志:默认路径为
$HADOOP_HOME/logs/yarn-<用户名>-nodemanager-<主机名>.log
内容的提问来源于stack exchange,提问作者Pravin
相关产品推荐
相关产品推荐

