首页 > 解决方案 > org.apache.hadoop.fs.UnsupportedFileSystemException:方案“s3”没有文件系统

问题描述

我有这段代码:

import org.apache.hadoop.fs.Path
import org.apache.hadoop.conf.Configuration

new Path("s3://bucket/key").getFileSystem(new Configuration())

当我在本地运行它时,出现以下异常:

No FileSystem for scheme "s3"
org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "s3"
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3336)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3356)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:123)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3407)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3375)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:486)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365)

但是,当我使用 spark-shell 在 EMR 上运行它时,它可以工作:

scala> new Path("s3://bucket/key").getFileSystem(new Configuration())
res0: org.apache.hadoop.fs.FileSystem = com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem

为了包含com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem在我的项目中,我应该添加什么到我的 sbt 文件中?我知道 s3a:// 有效,但我想在本地测试和 EMR 应用程序中都使用 s3://。

标签: amazon-web-servicesscalahadoopamazon-s3amazon-emr

解决方案


如果您只是希望 URL 匹配,请尝试在您的 spark 作业中设置

spark.hadoop.fs.s3.impl org.apache.hadoop.fs.s3a.S3AFileSystem

这表示“将 S3A FS 用于 s3 url”。


推荐阅读