You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark2.3在YARN集群部署模式下spark-submit提交任务参数被截断问题

问题根因

这个问题是Spark 2.3与Hadoop 2.7.3版本组合下的已知转义bug:

  • YARN cluster模式运行时,Spark Driver进程会在YARN节点上由launch_container.sh脚本拉起,脚本生成过程中Spark的参数转义逻辑对连续闭合的大括号}}处理异常,会把第二个}识别为脚本语法的结束标记,直接截断后续内容,最终导致传入主类的参数不完整
  • client模式下Driver进程在提交节点本地启动,参数不需要经过YARN脚本的二次转义,因此传递正常
解决方案

提供3种可行的修复方案,可根据实际场景选择:

  1. 参数转义规避(无需改代码/升级版本)
    提交命令中对JSON参数的连续闭合大括号做额外转义,把原有参数'{"sample":{}}'修改为'{"sample":{}\\}'即可正常传递完整JSON。
    修改后的完整提交命令如下:
spark-submit --conf spark.executor.memory=24g --conf spark.master=yarn --conf spark.submit.deployMode=cluster --conf spark.executor.extraJavaOptions=-Dfile.encoding=UTF-8 --conf spark.files=file:///opt/configurations/app.conf --class com.example.HelloWorld --queue sample_q file:///opt/jars/example.jar '{"sample":{}\}'
  1. Base64编码传递(彻底规避转义问题)
    如果需要传递的JSON结构复杂,转义容易出错,可以先把JSON内容做Base64编码后作为参数传递,在HelloWorld主方法中先对入参做Base64解码再使用,完全避开特殊字符转义问题。

  2. 版本升级(永久修复)
    升级Spark到2.4及以上版本,或是升级Hadoop到2.8及以上版本,这两个版本分支均已修复该参数转义bug,升级后原有提交命令无需修改即可正常运行。

内容的提问来源于stack exchange,提问作者PRASANNA SARAF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:15:03