hadoop在本地运行spark作业时,“scheme:gs没有文件系统”

a14dhokn  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(328)

我正在运行一个spark作业(版本1.2.0),输入是googleclous存储桶中的一个文件夹(即gs://mybucket/folder)
在mac计算机上本地运行作业时,出现以下错误:
5932[main]error com.doit.customer.dataconverter.phase1-日期:2014\u 09\u 23的作业失败,错误:scheme:gs没有文件系统
我知道要支持gs路径需要做两件事。一个是安装gcs连接器,另一个是在hadoop安装的core-site.xml中进行以下设置:

<property>
    <name>fs.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
    <description>The FileSystem for gs: (GCS) uris.</description>
</property>
<property>
    <name>fs.AbstractFileSystem.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
    <description>
     The AbstractFileSystem for gs: (GCS) uris. Only necessary for use with Hadoop 2.
    </description>
</property>

我认为我的问题来自于这样一个事实:我不确定在这个本地模式下,每一个部件到底需要配置在哪里。在intellij项目中,我使用的是maven,因此我导入了spark库,如下所示:

<dependency> <!-- Spark dependency -->
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.2.0</version>
    <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>

,以及hadoop 1.2.1,如下所示:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>1.2.1</version>
</dependency>

问题是,我不确定在哪里为spark配置hadoop位置,以及在哪里配置hadoop conf。因此,我可能添加了错误的hadoop安装。另外,修改文件后是否需要重启?据我所知,我的机器上没有运行hadoop服务。

qc6wkl3g

qc6wkl3g1#

有两种方法可以帮助spark获取相关的hadoop配置,这两种方法都涉及到修改 ${SPARK_INSTALL_DIR}/conf :
将${hadoop\u home}/conf/core-site.xml复制或符号链接到${spark\u install\u dir}/conf/core-site.xml。例如,当 bdutil 安装到虚拟机上,它运行:

ln -s ${HADOOP_CONF_DIR}/core-site.xml ${SPARK_INSTALL_DIR}/conf/core-site.xml

旧的spark文档解释说,这使得spark的类路径中包含的xml文件自动:https://spark.apache.org/docs/0.9.1/hadoop-third-party-distributions.html
向${spark\u install\u dir}/conf/spark-env.sh添加一个条目:

export HADOOP_CONF_DIR=/full/path/to/your/hadoop/conf/dir

较新的spark文档似乎指出这是未来的首选方法:https://spark.apache.org/docs/1.1.0/hadoop-third-party-distributions.html

v09wglhw

v09wglhw2#

我说不出有什么问题,但我想试试。
尝试设置 fs.gs.project.id : <property><name>fs.gs.project.id</name><value>my-little-project</value></property> 打印 sc.hadoopConfiguration.get(fs.gs.impl) 以确保您的 core-site.xml 正在加载。在驱动程序和执行器中打印: println(x); rdd.foreachPartition { _ => println(x) } 确保将gcs jar发送给执行者( sparkConf.setJars(...) ). 我认为这在本地模式下并不重要(都是一个jvm,对吧?),但你永远不会知道。
只有你的程序需要重新启动。没有hadoop进程。在本地和独立模式下,spark只使用hadoop作为库,而且我认为只用于io。

lsmepo6l

lsmepo6l3#

在scala中,在设置Hadoop配置时添加以下配置:

val conf = sc.hadoopConfiguration
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")

相关问题