Scala 无法从Spark连接到S3-AmazonS3异常状态代码:400

Scala 无法从Spark连接到S3-AmazonS3异常状态代码:400,scala,amazon-web-services,apache-spark,hadoop,amazon-s3,Scala,Amazon Web Services,Apache Spark,Hadoop,Amazon S3,我正在尝试从PC上运行的Spark连接到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)

我正在尝试从PC上运行的Spark连接到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();
但得到以下例外情况:

主线程中的异常 com.amazonaws.services.s3.model.amazons3异常:状态代码: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")
但我还是得到了同样的例外。

还有

请尝试以下配置:

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)
    sc.hadoopConfiguration.set("fs.s3a.endpoint", "s3.us-east-1.amazonaws.com")
    val txtFile = sc.textFile("s3a://s3a://bucket-name/folder/file.txt")
    val contents = txtFile.collect();

我相信您的问题是因为您没有在配置集中指定端点。将us-east-1分配给您使用的任何地区。

我已经解决了这个问题

我的目标是法兰克福的一个地区,该地区需要使用第4版的签名

我已经将S3存储桶的区域更改为爱尔兰,现在它可以工作了。

根据,一些区域仅支持签名版本4,需要添加以下配置:

--conf "spark.executor.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true"


这对我来说很有用这就是一切…不需要其他出口等

    sparkContext._jsc.hadoopConfiguration().set("fs.s3a.access.key", AWS_KEY)
    sparkContext._jsc.hadoopConfiguration().set("fs.s3a.secret.key", AWS_SECRET)
    sparkContext._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3.us-east-2.amazonaws.com")
要运行:

spark-submit --conf spark.driver.extraJavaOptions='-Dcom.amazonaws.services.s3.enableV4' --conf spark.executor.extraJavaOptions='-Dcom.amazonaws.services.s3.enableV4'   --packages org.apache.hadoop:hadoop-aws:2.7.1  spark_read_s3.py

我已经在我的例子中添加了端点,区域是eu-central-1,但我仍然得到相同的结果exception@Alon-你解决问题了吗?你能提供solution@LearnHadoop是的,我有,你可以在这里看到我接受的答案。你能尝试添加sc.hadoopConfiguration.setfs.s3a.impl,org.apache.hadoop.fs.s3a.S3AFileSystem吗
spark-submit --conf spark.driver.extraJavaOptions='-Dcom.amazonaws.services.s3.enableV4' --conf spark.executor.extraJavaOptions='-Dcom.amazonaws.services.s3.enableV4'   --packages org.apache.hadoop:hadoop-aws:2.7.1  spark_read_s3.py