【问题标题】:AWS EMR Spark --properties-file Class com.amazon.ws.emr.hadoop.fs.EmrFileSystem not foundAWS EMR Spark --properties-file 类 com.amazon.ws.emr.hadoop.fs.EmrFileSystem 未找到
【发布时间】:2025-12-20 06:55:05
【问题描述】:

我正在尝试使用以下命令从 AWS EMR emr-5.20.0 主节点提交 Spark 应用程序:

spark-submit --executor-memory 4g --deploy-mode cluster --master yarn --class com.example.Application --properties-file config.conf s3://example-jobs/application.jar

但它失败并出现以下错误:

Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.amazon.ws.emr.hadoop.fs.EmrFileSystem not found

原因是以下参数:

--properties-file config.conf

我做错了什么以及如何正确地将属性文件传递给 AWS EMR Apache Spark?

【问题讨论】:

    标签: amazon-web-services apache-spark amazon-emr


    【解决方案1】:

    通过传递 --properties-file,您将完全覆盖 EMR 在 /etc/spark/conf/spark-defaults.conf 中提供的许多默认值,并且特别错过了设置类路径以包含 EMRFS jar 的属性,这就是导致特定你遇到的错误。

    您可以在创建集群时按照https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-configure.html 配置 Spark,而不是指定您自己的完整属性文件。使用此方法配置 Spark 将导致您自己提供的值与 EMR 默认提供的值一起出现在 /etc/spark/conf/spark-defaults.conf 中。您提供的值将覆盖 EMR 在此处提供的任何默认值。

    对于任何不适用于集群级别但适用于单个应用程序级别的配置,您可以使用以下内容将其他配置传递给 spark-submit:

    spark-submit --conf KEY1=VALUE1 --conf KEY2=VALUE2 --executor-memory 4g --deploy-mode cluster --class ... --jar ... [args]

    顺便说一句,您不需要指定--master yarn,因为这已经在/etc/spark/conf/spark-defaults.conf 中指定了。此外,/etc/spark/conf/spark-defaults.conf 中的默认执行程序内存通常已经在 4-5g 左右,具体取决于集群中的实例类型。

    【讨论】: