`
cooliufang
  • 浏览: 129683 次
社区版块
存档分类
最新评论

Java对HDFS的操作

阅读更多
Hadoop文件系统
基本的文件系统命令操作, 通过hadoop fs -help可以获取所有的命令的详细帮助文件。

Java抽象类org.apache.hadoop.fs.FileSystem定义了hadoop的一个文件系统接口。该类是一个抽象类,通过以下两种静态工厂方法可以过去FileSystem实例:
public static FileSystem.get(Configuration conf) throws IOException
public static FileSystem.get(URI uri, Configuration conf) throws IOException


具体方法实现:
1、public boolean mkdirs(Path f) throws IOException
一次性新建所有目录(包括父目录), f是完整的目录路径。

2、public FSOutputStream create(Path f) throws IOException
创建指定path对象的一个文件,返回一个用于写入数据的输出流
create()有多个重载版本,允许我们指定是否强制覆盖已有的文件、文件备份数量、写入文件缓冲区大小、文件块大小以及文件权限。

3、public boolean copyFromLocal(Path src, Path dst) throws IOException
将本地文件拷贝到文件系统

4、public boolean exists(Path f) throws IOException
检查文件或目录是否存在

5、public boolean delete(Path f, Boolean recursive)
永久性删除指定的文件或目录,如果f是一个空目录或者文件,那么recursive的值就会被忽略。只有recursive=true时,一个非空目录及其内容才会被删除。

6、FileStatus类封装了文件系统中文件和目录的元数据,包括文件长度、块大小、备份、修改时间、所有者以及权限信息。
通过"FileStatus.getPath()"可查看指定HDFS中某个目录下所有文件。



package hdfsTest;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class OperatingFiles {
	//initialization
	static Configuration conf = new Configuration();
	static FileSystem hdfs;
	static {
		String path = "/usr/java/hadoop-1.0.3/conf/";
		conf.addResource(new Path(path + "core-site.xml"));
		conf.addResource(new Path(path + "hdfs-site.xml"));
		conf.addResource(new Path(path + "mapred-site.xml"));
		path = "/usr/java/hbase-0.90.3/conf/";
		conf.addResource(new Path(path + "hbase-site.xml"));
		try {
			hdfs = FileSystem.get(conf);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//create a direction
	public void createDir(String dir) throws IOException {
		Path path = new Path(dir);
		hdfs.mkdirs(path);
		System.out.println("new dir \t" + conf.get("fs.default.name") + dir);
	}	
	
	//copy from local file to HDFS file
	public void copyFile(String localSrc, String hdfsDst) throws IOException{
		Path src = new Path(localSrc);		
		Path dst = new Path(hdfsDst);
		hdfs.copyFromLocalFile(src, dst);
		
		//list all the files in the current direction
		FileStatus files[] = hdfs.listStatus(dst);
		System.out.println("Upload to \t" + conf.get("fs.default.name") + hdfsDst);
		for (FileStatus file : files) {
			System.out.println(file.getPath());
		}
	}
	
	//create a new file
	public void createFile(String fileName, String fileContent) throws IOException {
		Path dst = new Path(fileName);
		byte[] bytes = fileContent.getBytes();
		FSDataOutputStream output = hdfs.create(dst);
		output.write(bytes);
		System.out.println("new file \t" + conf.get("fs.default.name") + fileName);
	}
	
	//list all files
	public void listFiles(String dirName) throws IOException {
		Path f = new Path(dirName);
		FileStatus[] status = hdfs.listStatus(f);
		System.out.println(dirName + " has all files:");
		for (int i = 0; i< status.length; i++) {
			System.out.println(status[i].getPath().toString());
		}
	}

	//judge a file existed? and delete it!
	public void deleteFile(String fileName) throws IOException {
		Path f = new Path(fileName);
		boolean isExists = hdfs.exists(f);
		if (isExists) {	//if exists, delete
			boolean isDel = hdfs.delete(f,true);
			System.out.println(fileName + "  delete? \t" + isDel);
		} else {
			System.out.println(fileName + "  exist? \t" + isExists);
		}
	}

	public static void main(String[] args) throws IOException {
		OperatingFiles ofs = new OperatingFiles();
		System.out.println("\n=======create dir=======");
		String dir = "/test";
		ofs.createDir(dir);
		System.out.println("\n=======copy file=======");
		String src = "/home/ictclas/Configure.xml";
		ofs.copyFile(src, dir);
		System.out.println("\n=======create a file=======");
		String fileContent = "Hello, world! Just a test.";
		ofs.createFile(dir+"/word.txt", fileContent);
	}
}




//output~
=======create dir=======
new dir hdfs://sfserver20.localdomain:9000/test

=======copy file=======
Upload to hdfs://sfserver20.localdomain:9000/test
hdfs://sfserver20.localdomain:9000/test/Configure.xml
hdfs://sfserver20.localdomain:9000/test/word.txt

=======create file=======
new file hdfs://sfserver20.localdomain:9000/test/word.txt

=======before delete file=======
new dir hdfs://sfserver20.localdomain:9000/test/del
new file hdfs://sfserver20.localdomain:9000/test/del.txt
/test has all files:
hdfs://sfserver20.localdomain:9000/test/Configure.xml
hdfs://sfserver20.localdomain:9000/test/del
hdfs://sfserver20.localdomain:9000/test/del.txt
hdfs://sfserver20.localdomain:9000/test/word.txt

=======after delete file=======
/test/del  delete? true
/test/del.txt  delete? true
/test/no  exist? false
/test has all files:
hdfs://sfserver20.localdomain:9000/test/Configure.xml
hdfs://sfserver20.localdomain:9000/test/word.txt
分享到:
评论
1 楼 NeverGiveUpToChange 2014-07-08  
很好        

相关推荐

    大数据技术基础实验报告-调用Java API实现HDFS操作.doc

    【大数据技术基础实验报告-调用Java API实现HDFS操作】 本实验主要涵盖了大数据技术的基础,特别是如何在Linux环境下利用Java API对Hadoop分布式文件系统(HDFS)进行操作。实验涉及的主要步骤包括Eclipse的安装、...

    java对大数据HDFS文件操作

    6. **项目示例**:提供的两个项目"java对HDFS文件操作jar包版"和"java对HDFS文件操作maven版.zip.zip"可能包含了上述操作的完整实现。`jar包版`可能是一个已经编译好的可执行程序,可以直接运行。而`maven版`则是一...

    java操作hdfs.rar

    Java操作HDFS(Hadoop Distributed File System)是大数据领域中常见的任务,特别是在处理大规模数据时。HDFS是一个分布式文件系统,由Apache Hadoop项目开发,它设计为在廉价硬件上运行,提供高吞吐量的数据访问。...

    java操作hdfs依赖包

    Java操作HDFS(Hadoop Distributed File System)是大数据处理中常见的任务,这通常涉及到使用Hadoop的Java API。为了在Java环境中与HDFS进行交互,你需要包含一系列的依赖包,这些包提供了必要的功能来读取、写入和...

    大数据-java操作HDFS基本操作

    在大数据领域,Java被广泛用于开发和操作分布式文件系统,如Hadoop的HDFS(Hadoop Distributed File System)。本文将详细讲解如何使用Java API进行HDFS的基本操作,包括增、删、查等常见任务。 首先,理解HDFS是至...

    java操作Hadoop源码之HDFS Java API操作-创建目录

    本文将详细讲解如何使用Java API来操作HDFS,特别是创建目录的功能。我们将探讨Hadoop的环境配置、HDFS API的使用以及具体创建目录的步骤。 首先,理解Hadoop的环境配置至关重要。在进行Java编程之前,你需要确保...

    elcipse java hadoop操作hdfs的api

    8. **异常处理**:在实际编程中,需要适当地处理HDFS操作可能抛出的异常,如`FileNotFoundException`、`IOException`等。 9. **最佳实践**:在使用HDFS API时,遵循最佳实践,如批量操作以减少网络开销,使用缓冲区...

    java-Hdfs体系结构与基本概念

    * 文件系统:HDFS 提供了一个文件系统接口,允许用户使用标准的文件操作来访问 HDFS 中的文件。 Java-HDFS 客户端 Java-HDFS 客户端是 HDFS 的 Java 实现,提供了一个 Java API 来访问 HDFS。Java-HDFS 客户端可以...

    实验二:熟悉常用的HDFS操作

    实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...

    java操作hadoop的hdfs的各种操作

    java操作hadoop的hdfs的各种操作,包括文件创建,删除,文件夹创建,上传文件,下载文件,读取文件等

    java管理hdfs文件和文件夹项目hadoop2.4

    在Hadoop生态系统中,Java是主要的编程语言,用于与HDFS(Hadoop Distributed File System)进行交互。...通过熟练掌握`FileSystem` API,你可以有效地编写管理HDFS的Java程序,实现对大数据集的高效存储和处理。

    Java操作HDFS.md

    Java操作HDFS.md

    JAVA操作HDFS案例的简单实现

    本篇文章主要介绍了JAVA操作HDFS案例的简单实现,涵盖了JAVA操作HDFS的基本概念、HDFS的基本操作、 JAVA与HDFS的集成等相关知识点。 1. JAVA操作HDFS的基本概念 HDFS(Hadoop Distributed File System)是一种...

    hdfs-java-api

    下面我们将对 HDFS Java API 进行详细的介绍。 HDFS Java API 概述 HDFS Java API 是一个 Java 库,提供了一个接口来访问 HDFS。该 API 提供了多种方式来操作 HDFS,包括文件的读取、写入、复制、删除等。 HDFS ...

    02--HDFS Java API操作.docx

    HDFS Java API 操作 HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大量数据。Java API 是 HDFS 的一个编程接口,允许开发者使用 Java 语言来操作 HDFS 中的文件和目录。本文将介绍...

    java操作Hadoop源码之HDFS Java API操作-上传文件

    在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...

    java API 操作HDFS

    javaAPI操作HDFS,测试可用 window环境需要下载hadoop客户端

    HDFS存取实例(java)

    1. 在进行HDFS操作时,必须确保Hadoop服务已启动,并且客户端可以正确连接到NameNode。 2. 文件上传和下载时要考虑文件权限,确保客户端有足够的权限进行操作。 3. 对于大数据文件,应合理设置缓冲区大小、复制因子...

    厦门大学-林子雨-大数据技术基础-第3章 分布式文件系统HDFS-上机练习-熟悉常用的HDFS操作

    首先,学生需要理解HDFS在Hadoop体系结构中的角色,然后熟练使用HDFS操作常用的Shell命令,最后熟悉HDFS操作常用的Java API。 本次上机练习的实验平台是Linux操作系统,使用Hadoop 1.2.1或以上版本,JDK 1.6或以上...

    java操纵hdfs

    根据实际需求,可以通过配置`Configuration`对象来调整HDFS操作的性能,例如设置缓冲区大小、超时时间等。 以上就是使用Java API操作HDFS的基本步骤和注意事项。实践中,你可能还需要考虑更多的细节,如错误处理、...

Global site tag (gtag.js) - Google Analytics