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

AWS Step Functions调用EMR执行PySpark任务报错spark-submit不存在如何解决

错误原因

你遇到的Cannot run program "spark-submit" error=2, No such file or directory报错,本质是EMR执行Step时,进程的环境变量PATH中没有包含Spark二进制文件的安装路径,无法找到spark-submit执行文件,常见触发场景有两个:

  • 提交Step时EMR集群还处于启动中,Spark组件未完成部署,全局环境变量还未加载完成
  • Step定义中直接调用spark-submit相对命令,没有指定全路径,command-runner无法定位执行文件

正确配置步骤

步骤1:确保Step提交时机正确

如果你是在Step Functions工作流中先创建EMR集群再提交任务,必须使用sync模式的创建集群资源arn:aws:states:::elasticmapreduce:createCluster.sync,该资源会等待集群完全进入可用(WAITING)状态后再进入下一个步骤,避免集群未初始化完成就提交任务。

步骤2:修改Step定义使用spark-submit全路径

EMR默认场景下spark-submit的全路径为/usr/bin/spark-submit,直接替换Step定义中Args的第一个参数即可,修改后的完整Step配置如下:

"EMR AddStep - Aggregate Daily": {
  "Type": "Task",
  "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync",
  "Parameters": {
    "ClusterId.$": "$.cluster.Cluster.Id",
    "Step": {
      "Name": "Aggregate Daily",
      "ActionOnFailure": "CONTINUE",
      "HadoopJarStep": {
        "Jar": "command-runner.jar",
        "Args": [
          "/usr/bin/spark-submit",
          "--deploy-mode",
          "cluster",
          "s3://emr/scripts/aggregate.py",
          "--day",
          "20210915",
          "--base_uri",
          "s3://"
        ]
      }
    }
  }
}

如果使用自定义AMI修改过Spark安装路径,可以先SSH登录EMR主节点执行which spark-submit获取准确全路径后替换。

备选兼容方案

如果修改全路径后仍有环境变量加载问题,可以改为调用bash加载全局配置后执行spark-submit,Args配置如下:

"Args": [
  "bash",
  "-c",
  "source /etc/profile && spark-submit --deploy-mode cluster s3://emr/scripts/aggregate.py --day 20210915 --base_uri s3://"
]

该方案会先加载系统全局环境变量,确保Spark相关路径被正确加载到运行时环境中。

内容的提问来源于stack exchange,提问作者Maynard Keynes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:39:03