Google以“Interoperability Mode”的形式提供“s3兼容”访问其云存储服务。
我们在封闭的网络上运行火花,我们与互联网的连接是通过代理。谷歌自己的用于云存储的hadoop连接器没有代理的任何配置设置,所以我们必须使用内置的spark s3a连接器,它允许你设置你需要设置的所有属性以使用正在谈话的代理通过core-site.xml访问互联网和相应的Google URL端点:
<!-- example xml -->
<name>fs.s3a.access.key</name>
<value>....</value>
<name>fs.s3a.secret.key</name>
<value>....</value>
<name>fs.s3a.endpoint</name>
<value>https://storage.googleapis.com</value>
<name>fs.s3a.connection.ssl.enabled</name>
<value>True</value>
<name>fs.s3a.proxy.host</name>
<value>proxyhost</value>
<name>fs.s3a.proxy.port</name>
<value>12345</value>
然而,与boto不同,conflicting在我们的环境中使用类似设置的代理工作正常,Spark在尝试使用时抛出com.cloudera.com.amazonaws.services.s3.model.AmazonS3Exception我们的代理看起来像这样:
com.cloudera.com.amazonaws.services.s3.model.AmazonS3Exception:
The provided security credentials are not valid.
(Service: Amazon S3; Status Code: 403; Error Code: InvalidSecurity;
Request ID: null), S3 Extended Request ID: null
我在这里做错了什么,或者这根本不受支持?
同样,我很好奇这个版本的spark是否甚至使用了jets3t库?我找到了information 。
答案 0 :(得分:0)
我最终想出来了。您必须从类路径中删除一些特定的违规罐子。我已经详细说明了我的解决方案,以供将来使用。 :)