Amazon web services 301尝试访问AWS S3服务器时重定向

Amazon web services 301尝试访问AWS S3服务器时重定向,amazon-web-services,amazon-s3,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.se

我在亚太(孟买)地区创建了一个桶,在新加坡地区创建了另一个桶。我将键设置为环境变量。然后在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图像中的Spark(2.0.0),301通常表示您选择的端点不是bucket实际所在的端点


在spark-default.conf或sparkConf.set(“spark.hadoop.fs.s3a.endpoint”,…)中设置spark上下文时尝试设置端点。301通常意味着您选择的端点不是bucket实际所在的端点


在设置spark上下文时尝试设置端点,而不是稍后在spark-default.conf或sparkConf.set(“spark.hadoop.fs.s3a.endpoint”,…)

经过大量尝试和研究,我可以找到问题所在。让我们重温我的旅程

Hadoop 2.8与孟买s3a合作。带有Hadoop 2.7的Spark 2.1.1不起作用。Spark依赖Hadoop aws库连接到S3。所以,我发现Hadoop是罪魁祸首。然后我用Hadoop2.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()构建了Spark。它终于奏效了

虽然我发现了一些Classnotfound的错误

org.apache.hadoop.fs.s3a.S3AFileSystem
因此,我从mvn存储库网站下载了以下内容(因为这里提到了s3a依赖项)

  • aws-java-sdk-core-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
关于确切的版本,我查看了Hadoop2.8libs($hadoophome/share/Hadoop/tools/lib/)文件夹。在这之后,我上了乔达的课

org/joda/time/format/DateTimeFormat

“未找到”错误,我通过从mvn存储库网站下载joda-time-2.8.2 jar文件解决了该错误。

经过多次尝试和研究,我可以找到问题所在。让我们重温我的旅程

Hadoop 2.8与孟买s3a合作。带有Hadoop 2.7的Spark 2.1.1不起作用。Spark依赖Hadoop aws库连接到S3。所以,我发现Hadoop是罪魁祸首。然后我用Hadoop2.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()构建了Spark。它终于奏效了

虽然我发现了一些Classnotfound的错误

org.apache.hadoop.fs.s3a.S3AFileSystem
因此,我从mvn存储库网站下载了以下内容(因为这里提到了s3a依赖项)

  • aws-java-sdk-core-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
关于确切的版本,我查看了Hadoop2.8libs($hadoophome/share/Hadoop/tools/lib/)文件夹。在这之后,我上了乔达的课

org/joda/time/format/DateTimeFormat

“未找到”错误,我通过从mvn存储库网站下载joda-time-2.8.2 jar文件解决了该错误。

但端点是正确的。我将aws java sdk更新为1.7.4,现在它给出了400。另一个端点和铲斗工作正常。hadoop aws jar的版本是2.7,但端点是正确的。我将aws java sdk更新为1.7.4,现在它给出了400。另一个端点和铲斗工作正常。hadoop aws jar的版本是2.7OK,听起来您已经修复了它。我本来希望2.7 JAR(特别是AWS 1.7.4客户在joda time更新后与孟买合作)。您可以尝试将joda time更新为2.8.2&继续使用2.7.x JARs。否则:新的Hadoop 2.8.x二进制文件将于2017年6月发布;spark 2.3有一个构建配置文件“hadoop云”,包括与AWS、Azure和openstack@SteveLoughran谢谢你的洞察力。我的Spark distribution已经包含了joda-time-2.9.3.jar。我会检查hadoop云。@SteveLoughran当我编译Spark的最新代码时,它没有编译hadoop云。试图手动生成,但出现缺少配置文件的错误。这里有什么要考虑的吗?Maven Profile我今天早上使用的是:Pyarn,Hadoop-2.7,Hadoop云。如果这不起作用,请在issues.apache.orgI上提交JIRA文件。在Hadoop-2.7中,我仍然遇到了连接到版本4 S3的问题,但在Hadoop-2.8中一切都很顺利。很好,这个配置文件处理了每一个jar安装,否则需要手动完成。好的,听起来你已经修复了它。我本来希望2.7 JAR(特别是AWS 1.7.4客户在joda time更新后与孟买合作)。您可以尝试将joda time更新为2.8.2&继续使用2.7.x JARs。否则:新的Hadoop 2.8.x二进制文件将于2017年6月发布;spark 2.3有一个构建配置文件“hadoop云”,包括与AWS、Azure和openstack@SteveLoughran谢谢你的洞察力。我的Spark distribution已经包含了joda-time-2.9.3.jar。我会检查hadoop云。@SteveLoughran当我编译Spark的最新代码时,它没有编译hadoop云。试图手动生成,但出现缺少配置文件的错误。这里有什么要考虑的吗?Maven Profile我今天早上使用的是:Pyarn,Hadoop-2.7,Hadoop云。如果这不起作用,请在issues.apache.orgI上提交JIRA文件。在Hadoop-2.7中,我仍然遇到了连接到版本4 S3的问题,但事情进展缓慢