Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark &引用;方案没有文件系统:gs“;在本地运行spark作业时_Apache Spark_Hadoop_Google Cloud Storage_Google Cloud Dataproc_Google Hadoop - Fatal编程技术网

Apache spark &引用;方案没有文件系统:gs“;在本地运行spark作业时

Apache spark &引用;方案没有文件系统:gs“;在本地运行spark作业时,apache-spark,hadoop,google-cloud-storage,google-cloud-dataproc,google-hadoop,Apache Spark,Hadoop,Google Cloud Storage,Google Cloud Dataproc,Google Hadoop,我正在运行Spark作业(版本1.2.0),输入是Google Clous存储桶中的一个文件夹(即gs://mybucket/folder) 在Mac计算机上本地运行作业时,出现以下错误: 5932[main]错误com.doit.customer.dataconverter.Phase1-日期为2014\u 09\u 23的作业失败,错误为:没有用于scheme:gs的文件系统 我知道为了支持gs路径,需要做两件事。一个是安装GCS连接器,另一个是在Hadoop安装的core-site.xml

我正在运行Spark作业(版本1.2.0),输入是Google Clous存储桶中的一个文件夹(即gs://mybucket/folder)

在Mac计算机上本地运行作业时,出现以下错误:

5932[main]错误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>

fs.gs.impl
com.google.cloud.hadoop.fs.gcs.googlehadoop文件系统
gs:(GCS)URI的文件系统。
fs.AbstractFileSystem.gs.impl
com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS
gs:(GCS)URI的抽象文件系统。仅适用于Hadoop 2。
我认为我的问题来自于这样一个事实:我不确定在这个本地模式下每个部件到底需要配置在哪里。在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>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>1.2.1</version>
</dependency>

org.apache.spark
spark-core_2.10
1.2.0
org.apache.hadoop
hadoop客户端
,以及Hadoop 1.2.1,如下所示:

<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>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>1.2.1</version>
</dependency>

org.apache.hadoop
hadoop客户端
1.2.1

问题是,我不确定Spark的hadoop位置配置在哪里,也不确定hadoop配置在哪里。因此,我可能添加了错误的Hadoop安装。此外,在修改文件后是否需要重新启动某些内容?据我所知,我的机器上没有运行Hadoop服务。

我说不出什么问题,但我会尝试以下方法

  • 尝试设置
    fs.gs.project.id
    fs.gs.project.id我的小项目
  • 打印
    sc.hadoopConfiguration.get(fs.gs.impl)
    以确保您的
    core site.xml
    已加载。在驱动程序和执行器中打印它:
    println(x);rdd.foreachPartition{{u=>println(x)}
  • 确保将GCS jar发送给执行器(
    sparkConf.setJars(…)
    )。我认为这在本地模式下并不重要(都是一个JVM,对吗?),但你永远不知道

只有程序需要重新启动。没有Hadoop进程。在本地和独立模式下,Spark仅将Hadoop用作库,并且我认为仅用于IO。

有几种方法可以帮助Spark选择相关的Hadoop配置,这两种方法都涉及修改
${Spark\u INSTALL\u DIR}/conf

  • 将${HADOOP_HOME}/conf/core-site.xml复制或符号链接到${SPARK_INSTALL_DIR}/conf/core-site.xml。例如,当
    bdutil
    安装到VM上时,它会运行:

    ln -s ${HADOOP_CONF_DIR}/core-site.xml ${SPARK_INSTALL_DIR}/conf/core-site.xml
    
  • 旧的Spark文档解释说,这使得Spark的类路径中包含的xml文件自动:

  • 在${SPARK\u INSTALL\u DIR}/conf/SPARK-env.sh中添加一个条目,其中包含:

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

  • 较新的Spark文档似乎将此作为今后的首选方法:

    在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")
    

    我试过你的建议。添加项目id属性似乎没有影响。关于fs.gs.impl,我可以确认该值为null,因此这可能是问题的原因,但我不确定原因。我甚至尝试通过以下代码设置它:conf.set(“fs.gs.impl”,com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem.class.getName());但这并没有改变任何事情。我可以在API中调用hadoop文件夹路径吗?可能它指向了错误的Hadoop发行版,而不是我设置conf的版本。我认为
    core site.xml
    conf/core site.xml
    需要在类路径上。在将core-site.xml/hdfs-site.xml添加到类路径后,现在在执行sc=new JavaSparkContext(conf);-java.lang.ClassNotFoundException:org.apache.hadoop.fs.LocalFileSystem。尽管我的类路径中有hadoop-core.jar版本1.2.1,但我还是得到了这个结果。在我的项目中,这个类来自
    hadoop-common-2.2.0.jar
    。但是当我使用Spark Maven组件时,Spark安装目录是什么?啊,我明白了,如果你直接从Maven项目中运行,你实际上只需要创建core-site.xml(可能还有hdfs site.xml)通过普通的Maven方法,也就是通过将这两个文件添加到
    src/main/resources
    目录中,在其他地方提到的类路径中可用。编辑:过早按下enter键,这里有一个链接到一篇博客文章,描述了与Maven类似的Hadoop-only配置:在将core-site.xml/hdfs-site.xml添加到cl之后asspath,现在在执行sc=newjavasparkcontext(conf)时出现以下错误;-java.lang.ClassNotFoundException:org.apache.hadoop.fs.LocalFileSystem。我得到了这个,即使我的类路径中有hadoop-core.jar版本1.2.1。如果您使用
    mvn exec:java
    运行,那么您确实希望依赖项正确存在,但是如果您使用
    mvn package
    并只运行jarfile,您必须显式地确保类路径上的正确依赖关系。通常,您可能需要构建一个“uberjar”它将所有可传递的依赖项捆绑到一个jar中,可以在不必处理类路径的情况下运行。请参阅本页:-第二个示例与您需要的类似,您可以尝试将其复制/粘贴到pom.xml中。您可能需要为最新的google cloud storage connector添加一些内容才能实现这一点E