Apache spark &引用;方案没有文件系统:gs“;在本地运行spark作业时
我正在运行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中进行以下设置: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
<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发送给执行器(
)。我认为这在本地模式下并不重要(都是一个JVM,对吗?),但你永远不知道sparkConf.setJars(…)
只有程序需要重新启动。没有Hadoop进程。在本地和独立模式下,Spark仅将Hadoop用作库,并且我认为仅用于IO。有几种方法可以帮助Spark选择相关的Hadoop配置,这两种方法都涉及修改
${Spark\u INSTALL\u DIR}/conf
:
bdutil
安装到VM上时,它会运行:
ln -s ${HADOOP_CONF_DIR}/core-site.xml ${SPARK_INSTALL_DIR}/conf/core-site.xml
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