EMR Serverless运行Spark作业无法传入逗号分隔jars/archives列表如何解决
EMR Serverless Spark逗号分隔列表配置失效解决方案
核心原因
配置失效不是Spark本身不支持逗号分隔格式,是EMR Serverless控制台的Spark properties配置区块采用单行单键值对的解析规则,和本地spark-submit的参数解析逻辑不一致,多余的前缀、换行、空格都会导致值被截断。
正确配置方式
控制台UI提交场景
控制台配置块不需要加--conf前缀,每一行仅放一组键值对,逗号分隔的多值完整写在等号右侧,不要换行、不要在行尾加多余空格:
spark.archives=s3://s3-analytics-core-qa/serverless/pii-poc/config/dev-logback.xml#logback.xml,s3://s3-analytics-core-qa/serverless/pii-poc/config/gobi-dev-pii.conf#pii.conf spark.jars=s3://s3-analytics-core-qa/serverless/pii-poc/libs/log4j-over-slf4j-1.7.32.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/logback-classic-1.2.9.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/logback-core-1.2.9.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/logstash-logback-encoder-7.0.1.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/asm-6.1.jar spark.jars.packages=org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.2,org.apache.hadoop:hadoop-aws:3.2.0,com.amazonaws:aws-java-sdk-bundle:1.12.210
注意两个高频错误:
- 不要直接写
--packages=xxx,控制台不识别spark-submit的参数缩写,要换成完整配置键spark.jars.packages - 不要在逗号分隔的列表中间加换行,否则控制台会把换行后的内容当成独立配置项解析,导致值缺失
AWS CLI/SDK提交场景
命令行提交时直接使用原生spark-submit参数格式即可,注意--packages作为独立参数传入,不要混在--conf配置里:
aws emr-serverless start-job-run \ --application-id <你的EMR Serverless应用ID> \ --execution-role-arn <你的作业执行角色ARN> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://<你的作业入口脚本路径>", "sparkSubmitParameters": "--conf spark.archives=s3://s3-analytics-core-qa/serverless/pii-poc/config/dev-logback.xml#logback.xml,s3://s3-analytics-core-qa/serverless/pii-poc/config/gobi-dev-pii.conf#pii.conf --conf spark.jars=s3://s3-analytics-core-qa/serverless/pii-poc/libs/log4j-over-slf4j-1.7.32.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/logback-classic-1.2.9.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/logback-core-1.2.9.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/logstash-logback-encoder-7.0.1.jar,s3://s3-analytics-core-qa/serverless/pii-poc/libs/asm-6.1.jar --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.2,org.apache.hadoop:hadoop-aws:3.2.0,com.amazonaws:aws-java-sdk-bundle:1.12.210" } }'
配置校验方式
作业启动后,进入作业详情的Spark UI,打开Environment标签页,检查spark.jars、spark.archives、spark.jars.packages三个配置项的值是否为完整的逗号分隔列表,如果值存在截断,优先检查配置输入时是否存在多余换行、行尾空格或者错误的参数前缀。
内容的提问来源于stack exchange,提问作者Philip K. Adetiloye
相关产品推荐
相关产品推荐

