**问题:**在部署到AWS EMR之前,您可能需要在本地运行一些Spark/Pyspark实现来测试逻辑。您正在本地使用s3://
路径而不是s3a://
。如果您的设计模式在整个项目中与生成基于s3
的路径不一致,则可能会发生这种情况。
您可能会遇到以下问题:org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "s3"
或其他与Java相关的问题。
你可以使用localstack或者moto或者其他s3的mocking库。
1条答案
按热度按时间w1jd8yoj1#
解决方案确定你需要哪些jar文件。你可以通过访问Maven并查找依赖项来实现。
要从EMR之外的其他东西连接到AWS S3(它应该为您抽象出场景背后的jar),您需要使用
aws-java-sdk-bundle
和hadoop-aws
jar。例如,如果您使用的是Spark 3.1.3,那么Hadoop 3.2.0就附带了这个。所以您需要获取Hadoop客户端jar
hadoop-aws-3.2.0.jar
,并确定它需要的aws-java-sdk-bundle
版本。因此,对于hadoop-aws==3.2.0
,您可以使用aws-java-sdk-bundle==1.11.375
。您需要配置您的spark示例。
字符串
fs.s3a.endpoint
指向mocking服务器,moto for Python。spark.hadoop.fs.s3.impl
键将s3://
路径转换为s3a://
,因为这是支持AWS s3连接器所必需的。这里假设你已经手动下载了jar文件。如果你想直接从Maven下载jar文件,你可以使用这个配置选项来代替2
extraClassPath
和1spark.jars
配置。型