问题很简单:你有一个本地的spark实例(无论是集群还是仅以本地模式运行它),你想要读取gs://
答案 0 :(得分:4)
我在这里提交了我通过组合不同资源提出的解决方案:
下载Google云端存储连接器gs-connector并将其存储在$SPARK/jars/
文件夹中(检查底部的备选方案1 )
从here下载core-site.xml
文件,或从下方复制。这是hadoop使用的配置文件(由spark使用)。
将core-site.xml
文件存储在一个文件夹中。我个人创建了$SPARK/conf/hadoop/conf/
文件夹并将其存储在那里。
在spark-env.sh文件中,通过添加以下行来指示hadoop conf fodler:export HADOOP_CONF_DIR=
=</absolute/path/to/hadoop/conf/>
从Google的相应页面(Google Console-> API-Manager-> Credentials
)创建OAUTH2密钥。
将凭据复制到core-site.xml
文件。
备选方案1:您可以将jar存储在任何文件夹中,并将文件夹添加到spark类路径中,而不是将文件复制到$SPARK/jars
文件夹。一种方法是修改SPARK_CLASSPATH
SPARK_CLASSPATH`中的spark-env.sh``folder but
现已弃用。因此,可以查看here如何在spark类路径中添加jar
<configuration>
<property>
<name>fs.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
<description>Register GCS Hadoop filesystem</description>
</property>
<property>
<name>fs.gs.auth.service.account.enable</name>
<value>false</value>
<description>Force OAuth2 flow</description>
</property>
<property>
<name>fs.gs.auth.client.id</name>
<value>32555940559.apps.googleusercontent.com</value>
<description>Client id of Google-managed project associated with the Cloud SDK</description>
</property>
<property>
<name>fs.gs.auth.client.secret</name>
<value>fslkfjlsdfj098ejkjhsdf</value>
<description>Client secret of Google-managed project associated with the Cloud SDK</description>
</property>
<property>
<name>fs.gs.project.id</name>
<value>_THIS_VALUE_DOES_NOT_MATTER_</value>
<description>This value is required by GCS connector, but not used in the tools provided here.
The value provided is actually an invalid project id (starts with `_`).
</description>
</property>
</configuration>
答案 1 :(得分:2)
考虑到上次回答以来已经有一段时间了,尽管我会分享我最近的解决方案。请注意,以下说明适用于Spark 2.4.4。
确保已正确设置所有环境变量,以便您运行Spark应用程序。这是:
一种。 SPARK_HOME指向保存Spark安装的位置。
b。 GOOGLE_APPLICATION_CREDENTIALS指向json键所在的位置。如果您刚刚下载它,它将在您的〜/ Downloads
中
C。 JAVA_HOME指向Java 8 *“ Home”文件夹的位置。
如果您使用的是Linux / Mac OS,则可以使用export VAR=DIR
(其中VAR为变量,DIR为位置),或者如果要永久设置它们,可以将它们添加到〜/ .bash_profile或〜 /.zshrc文件。
对于Windows操作系统用户,在cmd中编写set VAR=DIR
进行与外壳程序相关的操作,或者编写setx VAR DIR
永久存储变量。
这对我有用,我希望它也能帮助其他人。
* Spark可在Java 8上运行,因此其某些功能可能与最新的Java Development Kit不兼容。
答案 2 :(得分:1)
就Spark 2.4.3而言,我需要执行以下操作才能从Spark local启用GCS访问。我使用了JSON密钥文件,而不是上面建议的client.id/secret
。
在$SPARK_HOME/jars/
中,从此处使用带阴影的gcs-connector
jar:http://repo2.maven.org/maven2/com/google/cloud/bigdataoss/gcs-connector/hadoop2-1.9.17/,否则我会遇到各种带有传递依赖项的故障。
(可选)向我的build.sbt
添加:
"com.google.cloud.bigdataoss" % "gcs-connector" % "hadoop2-1.9.17"
exclude("javax.jms", "jms")
exclude("com.sun.jdmk", "jmxtools")
exclude("com.sun.jmx", "jmxri")
在$SPARK_HOME/conf/spark-defaults.conf
中,添加:
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.google.cloud.auth.service.account.json.keyfile /path/to/my/keyfile
一切正常。