我在亚太(孟买)地区创造了一个桶,在新加坡地区又造了一个桶。我将键设置为环境变量。然后在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。
我使用了码头图像https://hub.docker.com/r/stvdberghe/spark-s3/中的Spark (2.0.0)
发布于 2017-05-31 20:18:16
301通常意味着您所选择的端点并不是实际使用的端点。
在设置星星之火上下文时尝试设置端点,而不是稍后在spark-default.conf或sparkConf.set("spark.hadoop.fs.s3a.endpoint",.)中设置。
发布于 2017-06-01 10:38:33
经过大量的尝试和研究,我可以找出问题。让我们重新回顾我的旅程。
Hadoop2.8曾与孟买s3a合作。火花2.1.1与Hadoop 2.7不起作用。星星之火依赖于Hadoop库连接到S3。所以我发现Hadoop是罪魁祸首然后,我用Hadoop2.8发行版查找Spark,但它是不可用的。我试图替换Spark-2.1.1-hadoop-2.7的Hadoop库,但是它不太适合。AWS改变了许多API,甚至Hadoop也改变了客户机库,以连接到S3/AWS服务。它合并了hadoop和;增加了AWS-java-SDKS3和更多的库。最后,我用Hadoop2.8 (https://spark.apache.org/docs/2.1.0/building-spark.html#specifying-the-hadoop-version)构建了星火公园。终于成功了。
虽然我发现了一些经典错误
org.apache.hadoop.fs.s3a.S3AFileSystem因此,我从mvn存储库网站下载了以下内容(因为这里提到了https://hadoop.apache.org/docs/current3/hadoop-aws/tools/hadoop-aws/index.html#Dependencies在s3a依赖项中)
对于确切的版本,我查看了Hadoop2.8libs ($ Hadoop _HOME/share/hadoop/tools/lib/)文件夹。在这之后,我上了乔达的课
org/joda/time/format/DateTimeFormat找不到错误,我通过从mvn存储库网站下载jodatime-2.8.2jar文件来解决这个错误。
https://stackoverflow.com/questions/44284451
复制相似问题