基于JavaAPI对hdfs的操作
通过Java API来访问HDFS,首先介绍HDFS中的文件操作主要涉及的几个类。
·Configuration类:该类的对象封装了客户端或者服务器的配置。
·FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法对文件进行操作。FileSystem fs=FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。
·FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入/输出流,分别通过FileSystem的open方法和create方法获得。
接下来通过实例介绍如何利用Java API进行文件夹的创建、文件列表显示、文件上传和文件下载操作,为了使读者对实例具有完整性的理解,我们把主函数也列了出来。实例代码如下:
//需要的包
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 HdfsDemo1 {
public static void main(String[] args) {
createFolder();//文件的创建
uploadFile();//文件上传
downloadFile();//文件下载
listFile(new Path("/");//递归显示文件夹
}
}
1.创建文件夹
如果想要将文件放入不同的文件夹中,则可以有针对性地动态创建文件夹。关于文件夹的创建比较简单。代码如下:
//1.创建文件夹
public static void createFolder() {
//定义一个配置对象
Configuration conf = new Configuration();
try {
//通过配置信息得到文件系统的对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"),conf,"root");
//在指定的路径下创建文件夹
Path path = new Path("/javaAddFolder1");
System.out.println(fs.mkdirs(path));
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2.递归显示文件
//2.递归显示文件
public static void listFile(Path path){
//定义个配置对象
Configuration conf = new Configuration();
try {
//通过配置信息得到文件系统的对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root");
//传入路径,表示显示某个路径下的文件夹列表
//将给定路径下所有的文件元数据放到一个FileStatus的数组
//FileStatus对象封装了文件和目录的元数据,包括文件长度、块大小、权限等
FileStatus[] fileStatuses = fs.listStatus(path);
for (int i= 0 ; i<fileStatuses.length;i++){
FileStatus fileStatus = fileStatuses[i];
//首先检测当前是否是文件夹,如果是则进行递归
if(fileStatus.isDirectory()){
System.out.println("当前路径是: "+fileStatus.getPath());
listFile(fileStatus.getPath());
} else {
System.out.println("当前路径是:"+fileStatus.getPath());
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
3.文件上传
//3.文件上传
public static void uploadFile(){
//定义个配置对象
Configuration conf = new Configuration();
try {
//通过配置信息得到文件系统的对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root");
//定义文件的路径和上传的路径
Path src = new Path("D://kmeans_data.txt");
Path dest = new Path("/");
//从本地上传到文件服务器上
fs.copyFromLocalFile(src,dest);
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
4.文件下载
//4.文件下载
public static void downloadFile(){
//定义配置对象
Configuration conf = new Configuration();
try {
//通过配置文件加载文件系统对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root");
//定义下文文件的路径和本地下载路径
Path src = new Path("/kmeans_data.txt");
Path dest = new Path("F://");
//下载文件到本地
fs.copyToLocalFile(src,dest);
} catch (Exception e) {
e.printStackTrace();
}
}
author@nohert