如何通过AWS Step Function为Amazon EMR添加步骤并解决参数引号报错问题
问题原因
你当前配置的核心问题是将spark-submit命令、脚本路径、输入输出路径等所有参数统一拼接为单个字符串,放入了Args数组的唯一元素中。EMR调用command-runner.jar执行步骤时,会将数组的每个元素作为独立参数处理,单个完整命令字符串会被识别为单一可执行文件,自动在外层包裹引号,导致命令解析失败。
修正后的配置
你只需要将所有参数拆分为Args数组的独立元素即可,修改后的对应配置段如下:
"Next": "Run first step" }, "Run first step": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "Run Data Transformation", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "spark-submit", "s3://xdam-nyctaxi-emr-research/scripts/nyctaxi-tranform-task.py", "s3://xdam-nyctaxi-emr-research/data/nyctaxi-raw/nyc_taxi_trip_duration.csv", "s3://xdam-nyctaxi-emr-research/data/nyctaxi-transformed/" ] } } } }
生效原理
command-runner.jar的参数要求传入的数组每个元素对应一个独立的命令分段,无需手动将所有参数拼接为完整命令字符串。拆分后Step Function传递给EMR的参数不会额外添加外层引号,完全匹配官方要求的参数格式。
内容的提问来源于stack exchange,提问作者Michelle Santos
相关产品推荐
相关产品推荐

