Spark中的HDFS文件访问



我正在开发一个应用程序,从hadoop读取文件,处理并将数据存储回hadoop。 我很困惑正确的hdfs文件路径格式应该是什么。当从火花外壳读取 hdfs 文件时,例如

val file=sc.textFile("hdfs:///datastore/events.txt")

它工作正常,我能够阅读它。

但是当我将jar汇总为包含相同代码集的纱线时,它给出的错误是

org.apache.hadoop.HadoopIllegalArgumentException: Uri without authority: hdfs:/datastore/events.txt

当我添加名称节点 ip 作为hdfs://namenodeserver/datastore/events.txt一切正常时。

我对这种行为有点困惑,需要指导。

注意:我正在使用 aws emr 设置,所有配置都是默认配置。

如果你想使用 sc.textFile("hdfs://..."(,你需要给出完整的路径(绝对路径(,在你的例子中是"nn1home:8020/..">

如果你想让它变得简单,那么只需使用 sc.textFile("hdfs:/input/war-and-peace.txt"(

那只是一个/

我认为它会起作用。

问题解决了。当我进一步调试时fs.defaultFS当我只是将路径传递为hdfs:///path/to/file时,core-site.xml没有使用该属性。但是所有的hadoop配置属性都被加载了(因为我记录了sparkContext.hadoopConfiguration对象。

作为解决方法,我手动将属性读取为sparkContext.hadoopConfiguration().get("fs.defaultFS)并将其附加到路径中。

我不知道这是不正确的方法。

最新更新