如何使用Spark与谷歌云存储的“互操作性模式”?

时间:2016-02-26 21:08:14

标签: amazon-s3 apache-spark google-cloud-storage boto jets3t

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 htop output

1 个答案:

答案 0 :(得分:0)

我最终想出来了。您必须从类路径中删除一些特定的违规罐子。我已经详细说明了我的解决方案,以供将来使用。 :)

https://gist.github.com/chicagobuss/6557dbf1ad97e5a09709