我正在尝试从spark(在我的pc上运行)连接到我的s3存储桶:
val spark = SparkSession
.builder
.appName("S3Client")
.config("spark.master", "local")
.getOrCreate()
val sc = spark.sparkContext;
sc.hadoopConfiguration.set("fs.s3a.access.key", ACCESS_KEY)
sc.hadoopConfiguration.set("fs.s3a.secret.key", SECRET_KEY)
val txtFile = sc.textFile("s3a://bucket-name/folder/file.txt")
val contents = txtFile.collect();
但得到以下例外:
线程“main”com.amazonaws.services.s3.model.amazons3exception:状态代码:400,aws服务:amazon s3,aws请求id:07a7bdc9135bcc84,aws错误代码:null,aws错误消息:错误请求,s3扩展请求id:6ly2vhz2majdql5uz/qudiffn1hkhrzirw6h441oosgz+plivlw2fxsz9xmd8cubrnhcdh8upe=
我见过这个问题,但对我没有帮助。
编辑:
正如扎克建议的那样,我补充说:
sc.hadoopConfiguration.set("fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com")
但我还是得到了同样的例外。
4条答案
按热度按时间cfh9epnr1#
根据s3文档,部分地区仅支持“签名版本4”,需要增加以下配置:
以及
tp5buhyn2#
这对我来说很有用(这就是一切…不需要其他出口等)
要运行:
x8diyxa73#
阿隆,
请尝试以下配置:
我相信您的问题是由于您没有在配置集中指定端点造成的。子输出
us-east-1
无论你使用哪个地区。iugsix8n4#
我已经解决了这个问题。
我的目标是一个地区(法兰克福),需要使用第4版的签名。
我把s3桶的区域改成了爱尔兰,现在它开始工作了。