当我尝试使用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。
答案 0 :(得分: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会掩盖您之前的定义。
答案 1 :(得分:0)
选项对
1.确保core-site.xml在驱动程序的类路径中可用。这样,core-site.xml将自动加载。
2.如果仅需要设置默认文件系统uri,我们可以在spark-defaults.conf
或使用SparkConf
为应用程序创建的spark.hadoop.fs.defaultFS
对象中进行设置,并将其值设置为{{1 }}