java—创建uri指向hdfs的文件示例

ntjbwcob  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(358)

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

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类提供的函数访问文件列表,例如 file.list() 返回一个字符串数组,该字符串命名此抽象路径名表示的目录中的文件和目录。我试过密码,但它返回了 nullfile.list() .
不推荐使用下面的方法,因为我正在尝试为普通文件系统和hdfs编写相同的代码库,以实现代码的可重用性。

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

xam8gpfp1#

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

e7arh2l6

e7arh2l62#

常规的内置java/scala文件api不适用于hdfs文件。协议和实现太不一样了。您必须使用hadoopapi来访问hdfs文件,如第二个示例所示。
不过,好消息是hadoopapi将适用于非hdfs文件(常规文件)。所以代码是可重用的。只需使用如下uri: file:///foo/bar 对于本地文件。

相关问题