我正在运行一个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服务。
3条答案
按热度按时间qc6wkl3g1#
有两种方法可以帮助spark获取相关的hadoop配置,这两种方法都涉及到修改
${SPARK_INSTALL_DIR}/conf
:将${hadoop\u home}/conf/core-site.xml复制或符号链接到${spark\u install\u dir}/conf/core-site.xml。例如,当
bdutil
安装到虚拟机上,它运行:旧的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添加一个条目:
较新的spark文档似乎指出这是未来的首选方法:https://spark.apache.org/docs/1.1.0/hadoop-third-party-distributions.html
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。
lsmepo6l3#
在scala中,在设置Hadoop配置时添加以下配置: