Apache spark 400尝试从Spark访问S3时请求错误
我正试图从us-east-2(俄亥俄州)的一个桶中读取一个文件thorughApache spark 400尝试从Spark访问S3时请求错误,apache-spark,amazon-s3,amazon-emr,Apache Spark,Amazon S3,Amazon Emr,我正试图从us-east-2(俄亥俄州)的一个桶中读取一个文件thorughs3a,我收到了400个错误的请求响应: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 400, AWS Service: Amazon S3, AWS Request ID: [removed], AWS Error Code: null, AWS Error Message: Bad Request, S3 Extended Reque
s3a
,我收到了400个错误的请求响应:
com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 400, AWS Service: Amazon S3, AWS Request ID: [removed], AWS Error Code: null, AWS Error Message: Bad Request, S3 Extended Request ID: [removed]
由于我的代码与悉尼的另一个bucket一起工作,这似乎是一个签名API版本问题(俄亥俄州只支持4,悉尼支持2和4)。因此,我尝试设置端点,将其添加到spark submit
,如其他帖子所建议:
--conf "spark.hadoop.fs.s3a.endpoint=s3.us-east-2.amazonaws.com"
但那没什么区别。我还尝试将其添加到conf文件中,并使用--properties file[file\u path]
spark.hadoop.fs.s3a.endpoint s3.us-east-2.amazonaws.com
没有区别。对于俄亥俄州,我仍然会遇到同样的错误(由于明显的原因,它不再适用于Sydney)。在代码中添加以下行:
System.setProperty("com.amazonaws.services.s3.enableV4", "true")
这是hadoop aws的问题。为什么要删除hadoop标签?也许会有帮助。看起来您需要显式启用V4签名。我升级到Hadoop 3.0.0,就这样完成了。所以我认为这是一个Hadoop bug。