如何将hdfs里某一目录下的所有文件的文件名读取出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将hdfs里某一目录下的所有文件的文件名读取出来相关的知识,希望对你有一定的参考价值。

参考技术A 默认是从hdfs读取文件,也可以指定sc.textFile("路径").在路径前面加上hdfs://表示从hdfs文件系统上读
本地文件读取 sc.textFile("路径").在路径前面加上file:// 表示从本地文件系统读,如file:///home/user/spark/README.md

如何使用Java API读写HDFS

//流读入和写入
InputStream in=null;
//获取HDFS的conf
//读取HDFS上的文件系统
FileSystem hdfs=FileSystem.get(conf);
//使用缓冲流,进行按行读取的功能
BufferedReader buff=null;
//获取日志文件的根目录
Path listf =new Path("hdfs://10.2.143.5:9090/root/myfile/");
//获取根目录下的所有2级子文件目录
FileStatus stats[]=hdfs.listStatus(listf);
//自定义j,方便查看插入信息
int j=0;
for(int i = 0; i < stats.length; i++)
//获取子目录下的文件路径
FileStatus temp[]=hdfs.listStatus(new Path(stats[i].getPath().toString()));
for(int k = 0; k < temp.length;k++)
System.out.println("文件路径名:"+temp[k].getPath().toString());
//获取Path
Path p=new Path(temp[k].getPath().toString());
//打开文件流
in=hdfs.open(p);
//BufferedReader包装一个流
buff=new BufferedReader(new InputStreamReader(in));
String str=null;
while((str=buff.readLine())!=null)

System.out.println(str);

buff.close();
in.close();

参考技术A HDFS API详解

  Hadoop中关于文件操作类基本上全部是在"org.apache.hadoop.fs"包中,这些API能够支持的操作包含:打开文件,读写文件,删除文件等。

Hadoop类库中最终面向用户提供的接口类是FileSystem,该类是个抽象类,只能通过来类的get方法得到具体类。get方法存在几个重载版本,常用的是这个:

static FileSystem get(Configuration conf);

  该类封装了几乎所有的文件操作,例如mkdir,delete等。综上基本上可以得出操作文件的程序库框架:

operator()



得到Configuration对象

得到FileSystem对象

进行文件操作



6.1 上传本地文件

  通过"FileSystem.copyFromLocalFile(Path src,Patch dst)"可将本地文件上传到HDFS的制定位置上,其中src和dst均为文件的完整路径。具体事例如下:

package com.hebut.file;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class CopyFile

public static void main(String[] args) throws Exception

Configuration conf=new Configuration();

FileSystem hdfs=FileSystem.get(conf);

//本地文件

Path src =new Path("D:\\HebutWinOS");

//HDFS为止

Path dst =new Path("/");

hdfs.copyFromLocalFile(src, dst);

System.out.println("Upload to"+conf.get("fs.default.name"));

FileStatus files[]=hdfs.listStatus(dst);

for(FileStatus file:files)

System.out.println(file.getPath());





以上是关于如何将hdfs里某一目录下的所有文件的文件名读取出来的主要内容,如果未能解决你的问题,请参考以下文章

HDFS简单编程实例:文件合并

PHP读取目录下所有文件

.net 如何读取出web某一目录下面的所有图片 并显示在网页中

如何使用Java API读写HDFS

在php中, 如何动态读取目录文件夹下的图片?

C语言怎么读取某一文件夹下的所有文件夹和文件?