EMR 7.0.0中PySpark报错:Class org.apache.hadoop.fs.s3a.S3AFileSystem未找到
解决EMR 7.0.0中Spark读取S3时的
org.apache.hadoop.fs.s3a.S3AFileSystem找不到问题 核心原因:依赖版本不匹配
你的EMR环境使用Hadoop 3.3.6,但添加的hadoop-aws依赖是3.2.0,版本不一致导致类加载冲突,这是找不到目标类的主要问题。修正步骤
- 匹配Hadoop版本的依赖
将spark.jars.packages配置改为与EMR环境Hadoop版本一致的3.3.6:builder = pyspark.sql.SparkSession.builder.appName("stock-daily-ingestion") \ .config("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.3.6") \ .config('spark.sql.shuffle.partitions', 2500) sc = builder.getOrCreate() - 移除不必要的手动配置
- EMR环境默认已配置S3文件系统实现类,无需手动指定
fs.s3.impl,删除该配置项 - EMR会自动通过集群实例的IAM角色获取S3访问权限,无需手动指定
fs.s3a.aws.credentials.provider(硬编码密钥的方式不推荐在EMR集群中使用)
- EMR环境默认已配置S3文件系统实现类,无需手动指定
- 匹配Hadoop版本的依赖
额外排查点
如果修改后仍有问题,可以检查:- 集群绑定的IAM角色是否具备目标S3路径的读写权限
- 确认EMR集群启动时已预装S3相关核心组件(EMR默认会包含,无需额外配置)
内容的提问来源于stack exchange,提问作者TripleH
相关产品推荐
相关产品推荐

