我正在尝试使用以下命令从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?
答案 0 :(得分: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左右,具体取决于集群中的实例类型。