1

当我尝试使用 spark.read.parquet() 从指定位置(如 /test)读取镶木地板文件时,我收到一条错误消息,提示 file://test 不存在。当我将 core-site.xml 添加为代码中的资源时

sc.hadoopConfiguration.addResource(new Path(<path-to-core-site.xml>))

它确实在hdfs中查找。但是我不想在代码中添加资源。我的问题是如何确保 spark 读取 core-site.xml 并使用 hdfs 作为默认文件系统。

我已经在虚拟机中设置了一个带有 hadoop 3、spark 2.4.2 和 yarn 作为资源管理器的 ubuntu 18.04.2LTS 服务器。我已经将 core-site.xml 配置为 fs.defaultFS 设置为 hdfs://localhost:9000。我还在 bash 文件中配置了 HADOOP_CONF_DIR。

4

2 回答 2

0

好吧,这是一个有许多可能答案的通用问题。我会尽我所能回答: https ://spark.apache.org/docs/latest/configuration.html#inheriting-hadoop-cluster-configuration 它在链接中进行了说明,您可以将环境变量 HADOOP_CONF_DIR 设置为包含 core-site.xml 的目录,只要您不在 spark-env.sh 中覆盖它或它应该可以工作的东西。

顺便说一句,您确定您在 HADOOP_CONF_DIR 上进行了导出,因为我从经验中知道它适用于 Spark 2.4.2,所以如果您认为核心站点未加载,可能是因为您没有正确定义变量或者您的 spark-env.sh掩盖你以前的定义。

于 2019-06-25T14:52:53.200 回答
0

几个选项
1. 确保 core-site.xml 在驱动程序的类路径中可用。这样 core-site.xml 将自动加载。
2. 如果只需要设置默认文件系统uri,我们可以在为应用程序创建spark-defaults.conf的对象中或对象中设置它,并将其值设置为SparkConfspark.hadoop.fs.defaultFShdfs:///

于 2019-06-25T15:57:04.620 回答