如何将 Spark 与 google 云存储的 "interoperability mode" 一起使用?

How does one use Spark with google cloud storage's "interoperability mode"?

Google 以名为“Interoperability Mode”的形式提供 "s3-compatible" 对其云存储服务的访问权限。

我们在封闭网络上 运行 火花,我们通过代理连接到互联网。 Google 自己的云存储 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 不同的是,它在我们的环境中使用类似设置的代理运行良好,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 库?我正在寻找 conflicting information.

我终于想通了。您必须从类路径中删除一些特定的有问题的 jar。我已经为未来的我详细介绍了我的解决方案。 :)

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