Livy始终以local模式运行求助:Spark on Yarn配置无效
解决Livy提交Spark任务强制使用local而非YARN的问题
看起来你已经在Spark和Livy的配置层面都指定了spark.master=yarn,甚至提交请求时也明确传了这个参数,但Livy实际启动Spark任务时还是硬套了local模式——从日志里的spark-submit命令就能看出问题所在。下面是几个针对性的排查和解决思路:
1. 先确认Livy是否真的加载了你的配置
首先得排查Livy服务有没有正确读取到livy.conf里的livy.spark.master = yarn配置:
- 去看Livy服务的启动日志,找有没有加载配置的相关条目,确认这行配置没有被忽略或者加载失败。
- 还要注意,要是Livy本身是绑定在本地Spark集群上启动的,可能会有默认配置强制走
local,但你已经明确设置了YARN,这点可以重点确认下。
2. 检查配置里的格式错误
日志里的spark-submit命令里有个奇怪的点:--conf ' spark.master=local ',参数值前面多了个空格。这大概率是配置解析时出了问题:
- 检查
spark-defaults.conf里的spark.master配置,确保是spark.master yarn,不要有多余的空格或者格式错误。 - 排查
livy.conf里有没有其他地方偷偷设置了spark.master=local,比如有没有加载额外的配置文件,或者环境变量里的Spark配置覆盖了你的设置。
3. 调整Livy的配置优先级
Livy的配置是有优先级顺序的(从高到低):
- 提交请求时带的
conf参数(就是你CURL里的设置) livy.conf里的livy.spark.*前缀的配置- Spark默认配置文件(
spark-defaults.conf)
但你的请求参数明显被覆盖了,可能是Livy里有某个配置锁定了master。可以试试:
- 在
livy.conf里明确添加livy.spark.master = yarn,同时检查有没有livy.spark.submitArgs这类参数,里面会不会藏着--master local的内容。 - 提交请求时,把
spark.master的值写成"yarn-client"(对应你设置的deployMode),更明确地指定模式,避免模糊匹配。
4. 验证Spark和Livy的版本兼容性
你用的是Spark 2.0.2,得确认Livy版本和它兼容。早期的Livy版本(比如0.4之前)对Spark 2.x的YARN支持可能有bug,要是你用的Livy版本太老,建议升级到适配Spark 2.0.2的版本试试。
5. 手动测试Spark原生提交命令
先绕开Livy,直接在服务器上跑Spark-submit命令,验证Spark本身能不能正常提交到YARN:
/usr/local/share/spark/spark-2.0.2/bin/spark-submit --name 'MY' --master yarn hdfs:///user/grzegorz/hello-world.py
如果这个命令能正常运行,说明Spark的YARN配置没问题,问题肯定出在Livy的配置或者参数传递环节。
内容的提问来源于stack exchange,提问作者Grzegorzg
相关产品推荐
相关产品推荐

