2014-05-08 29 views
-1

我使用Hadoop(通过Spark),并且需要访问请求者支付的S3N内容。通常,这是通过在jets3t.properties中启用httpclient.requester-pays-buckets-enabled = true来完成的。然而,我已经设置了这个,Spark/Hadoop忽略了它。也许我把jets3t.properties放在了错误的地方(/usr/share/spark/conf/)。如何让Hadoop/Spark/JetS3t访问请求者支付的存储桶?配置Hadoop使用S3 requester-pays-enabled

更新:如果您不在亚马逊EC2之外,则需要此项。在EC2内,亚马逊不需要请求者支付。所以,一个粗略的解决方法是用尽EC2。

回答

0

环境变量和配置文件没有工作,但一些手工代码所做的:sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "PUTTHEKEYHERE")

0

Spark系统由几个JVM(应用程序,主设备,工人,执行者)组成,因此设置属性可能会非常棘手。在文件操作之前,您可以使用System.getProperty()来检查代码运行的JVM是否加载了正确的配置。你甚至可以使用System.setProperty()来直接设置它,而不是搞清楚配置文件。

+0

没有使用'System.setProperty()'从代码中为时已晚,因为的JetS3t已经自身配置? – SRobertJames

+0

实际上我并不了解JetS3t,我的建议只是基于我在Spark中设置某些属性的努力。对于JetS3t,您可以使用'setRequesterPaysBucket()':https://bitbucket.org/jmurty/jets3t/src/e9ca56dabe58b2a8ae35494b44f12a5f1baa83bd/src/org/jets3t/samples/CodeSamples.java?at=default#cl-902 –