尝试访问AWS Mumbai S3服务器时301重定向

时间:2017-05-31 12:10:00

标签: amazon-web-services amazon-s3

我在亚太(孟买)地区创建了一个水桶,在新加坡地区创建了另一个水桶。我将键设置为环境变量。然后在Spark shell中运行以下命令。

新加坡:

sc.hadoopConfiguration.set("fs.s3a.endpoint","s3-ap-southeast-1.amazonaws.com")
val testdf = sqlContext.read.csv("s3a://dev-singapore/test.csv")

运行得很好。

对于孟买:

sc.hadoopConfiguration.set("fs.s3a.endpoint","s3.ap-south-1.amazonaws.com")
val testdf = sqlContext.read.csv("s3a://dev-mumbai/test.csv")

但它给了我以下错误

17/05/31 11:56:58 WARN DataSource: Error while looking for metadata directory.
com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 301, AWS Service: Amazon S3, AWS Request ID: BDFC*****9C820, AWS Error Code: null, AWS Error Message: Moved Permanently
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:798)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:421)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:232)

孟买地区S3服务器仅支持签名版本4,而新加坡支持版本2和版本4。

我使用了docker image https://hub.docker.com/r/stvdberghe/spark-s3/

中的Spark(2.0.0)

2 个答案:

答案 0 :(得分:0)

A 301通常意味着您选择的端点不是存储桶实际所在的端点。

尝试在spark-default.conf或sparkConf.set中设置spark上下文时设置端点(" spark.hadoop.fs.s3a.endpoint" ,. ..)

答案 1 :(得分:0)

经过多次尝试和研究,我可以找出问题所在。让我们回顾一下我的旅程。

Hadoop 2.8正在与孟买s3a合作。带有Hadoop 2.7的Spark 2.1.1无法运行。 Spark依赖于Hadoop aws库来连接S3。所以,我发现Hadoop是罪魁祸首。然后我用Hadoop 2.8发行版寻找Spark,但它不可用。我试图替换Spark-2.1.1-hadoop-2.7的Hadoop库,但它不太适合。 AWS已经更改了许多API,甚至Hadoop也更改了客户端库以连接到S3 / AWS服务。它合并了hadoop-aws和aws-java-sdk;添加了aws-java-sdk-s3和更多库。 最后,我使用Hadoop 2.8(https://spark.apache.org/docs/2.1.0/building-spark.html#specifying-the-hadoop-version)构建了Spark。它终于奏效了。

虽然我收到了一些Classnotfound的错误

org.apache.hadoop.fs.s3a.S3AFileSystem

所以我从mvn存储库网站下载了以下内容(因为这里提到了s3a依赖项中的https://hadoop.apache.org/docs/current3/hadoop-aws/tools/hadoop-aws/index.html#Dependencies

  • AWS-java的SDK-芯1.10.6.jar
  • AWS-java的SDK-KMS-1.10.6.jar
  • AWS-java的SDK-s3-1.10.6.jar
  • Hadoop的AWS-2.8.0.jar

对于确切的版本,我查看了Hadoop 2.8库($ HADOOP_HOME / share / hadoop / tools / lib /)文件夹。在此之后,我得到了joda课程

org/joda/time/format/DateTimeFormat

找不到我通过从mvn存储库网站下载joda-time-2.8.2 jar文件解决的错误。