从本地 spark 实例读取 google storage gs:// 文件系统

ore*_*tis 4 google-cloud-storage apache-spark google-cloud-platform

问题很简单:您有一个本地 spark 实例(集群或只是在本地模式下运行它)并且您想从 gs:// 读取

Nat*_*ate 8

在我使用 Spark 2.4.3 的情况下,我需要执行以下操作才能从 Spark 本地启用 GCS 访问。我使用了 JSON 密钥文件,而不是client.id/secret上面建议的。

  1. 在 中$SPARK_HOME/jars/,使用gcs-connector此处的阴影jar:http : //repo2.maven.org/maven2/com/google/cloud/bigdataoss/gcs-connector/hadoop2-1.9.17/否则我在传递依赖项方面遇到了各种失败。

  2. (可选)我的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")
    
    Run Code Online (Sandbox Code Playgroud)
  3. $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
    
    Run Code Online (Sandbox Code Playgroud)

一切正常。


ore*_*tis 5

我在这里提交我通过组合不同资源提出的解决方案:

  1. 下载谷歌云存储连接器:gs-connector并将其存储在$SPARK/jars/文件夹中(检查底部的备选方案 1

  2. core-site.xml这里下载文件,或从下面复制它。这是hadoop使用的配置文件,(spark使用的)。

  3. core-site.xml文件存储在一个文件夹中。我个人创建$SPARK/conf/hadoop/conf/文件夹并将其存储在那里。

  4. 在 spark-env.sh 文件中,通过添加以下行来指示 hadoop conf fodler: export HADOOP_CONF_DIR= =</absolute/path/to/hadoop/conf/>

  5. 从 Google ( Google Console-> API-Manager-> Credentials)的相应页面创建 OAUTH2 密钥。

  6. 将凭据复制到core-site.xml文件中。

备选方案1:$SPARK/jars您可以将jar 存储在任何文件夹中,并将该文件夹添加到spark 类路径中,而不是将文件复制到文件夹中。一种方法是SPARK_CLASSPATHspark-env.sh``folder butSPARK_CLASSPATH 中进行编辑,现在已弃用。因此,可以在此处查看如何在 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>
Run Code Online (Sandbox Code Playgroud)