使用指向HDFS的URI创建File实例

时间:2017-09-13 02:24:02

标签: java scala hadoop hdfs

是否可以通过将我的HDFS的uri作为File类的构造函数来创建文件实例?例如:

val conf = new Configuration()
conf.addResource(hdfsCoreSitePath)
conf.addResource(hdfsHDFSSitePath)

val uri = conf.get("fs.default.name")
val file = new File(uri + pathtothefile)

然后,对于文件实例,我希望使用File类提供的函数(例如file.list())访问文件列表,以返回命名此抽象路径名表示的目录中的文件和目录的字符串数组。 。我尝试了代码,但它在null上返回file.list()

不推荐使用以下方法,因为我正在尝试为普通文件系统和hdfs编写相同的代码库以实现可重用的代码。

val fileSystem = FileSystem.get(conf)
val status = fileSystem.listStatus(new Path(filepath))
status.map(x => ...

2 个答案:

答案 0 :(得分:0)

fs.default.name已弃用。尝试使用fs.defaultFS并确保使用以下命令在您引用的core-site.xml文件中提供此属性

conf.addResource(hdfsCoreSitePath)

https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/core-default.xml

答案 1 :(得分:0)

常规内置Java / Scala文件API不适用于HDFS文件。协议和实现太不同了。您必须使用Hadoop API来访问HDFS文件,如第二个示例所示。

但好消息是,Hadoop API 适用于非HDFS文件(常规文件)。所以代码是可重用的。只需使用类似file:///foo/bar的URI作为本地文件。