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
分享到:
相关推荐
【大数据技术基础实验报告-调用Java API实现HDFS操作】 本实验主要涵盖了大数据技术的基础,特别是如何在Linux环境下利用Java API对Hadoop分布式文件系统(HDFS)进行操作。实验涉及的主要步骤包括Eclipse的安装、...
6. **项目示例**:提供的两个项目"java对HDFS文件操作jar包版"和"java对HDFS文件操作maven版.zip.zip"可能包含了上述操作的完整实现。`jar包版`可能是一个已经编译好的可执行程序,可以直接运行。而`maven版`则是一...
Java操作HDFS(Hadoop Distributed File System)是大数据领域中常见的任务,特别是在处理大规模数据时。HDFS是一个分布式文件系统,由Apache Hadoop项目开发,它设计为在廉价硬件上运行,提供高吞吐量的数据访问。...
Java操作HDFS(Hadoop Distributed File System)是大数据处理中常见的任务,这通常涉及到使用Hadoop的Java API。为了在Java环境中与HDFS进行交互,你需要包含一系列的依赖包,这些包提供了必要的功能来读取、写入和...
在大数据领域,Java被广泛用于开发和操作分布式文件系统,如Hadoop的HDFS(Hadoop Distributed File System)。本文将详细讲解如何使用Java API进行HDFS的基本操作,包括增、删、查等常见任务。 首先,理解HDFS是至...
本文将详细讲解如何使用Java API来操作HDFS,特别是创建目录的功能。我们将探讨Hadoop的环境配置、HDFS API的使用以及具体创建目录的步骤。 首先,理解Hadoop的环境配置至关重要。在进行Java编程之前,你需要确保...
8. **异常处理**:在实际编程中,需要适当地处理HDFS操作可能抛出的异常,如`FileNotFoundException`、`IOException`等。 9. **最佳实践**:在使用HDFS API时,遵循最佳实践,如批量操作以减少网络开销,使用缓冲区...
* 文件系统:HDFS 提供了一个文件系统接口,允许用户使用标准的文件操作来访问 HDFS 中的文件。 Java-HDFS 客户端 Java-HDFS 客户端是 HDFS 的 Java 实现,提供了一个 Java API 来访问 HDFS。Java-HDFS 客户端可以...
实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...
java操作hadoop的hdfs的各种操作,包括文件创建,删除,文件夹创建,上传文件,下载文件,读取文件等
在Hadoop生态系统中,Java是主要的编程语言,用于与HDFS(Hadoop Distributed File System)进行交互。...通过熟练掌握`FileSystem` API,你可以有效地编写管理HDFS的Java程序,实现对大数据集的高效存储和处理。
Java操作HDFS.md
本篇文章主要介绍了JAVA操作HDFS案例的简单实现,涵盖了JAVA操作HDFS的基本概念、HDFS的基本操作、 JAVA与HDFS的集成等相关知识点。 1. JAVA操作HDFS的基本概念 HDFS(Hadoop Distributed File System)是一种...
下面我们将对 HDFS Java API 进行详细的介绍。 HDFS Java API 概述 HDFS Java API 是一个 Java 库,提供了一个接口来访问 HDFS。该 API 提供了多种方式来操作 HDFS,包括文件的读取、写入、复制、删除等。 HDFS ...
HDFS Java API 操作 HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大量数据。Java API 是 HDFS 的一个编程接口,允许开发者使用 Java 语言来操作 HDFS 中的文件和目录。本文将介绍...
在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...
javaAPI操作HDFS,测试可用 window环境需要下载hadoop客户端
1. 在进行HDFS操作时,必须确保Hadoop服务已启动,并且客户端可以正确连接到NameNode。 2. 文件上传和下载时要考虑文件权限,确保客户端有足够的权限进行操作。 3. 对于大数据文件,应合理设置缓冲区大小、复制因子...
首先,学生需要理解HDFS在Hadoop体系结构中的角色,然后熟练使用HDFS操作常用的Shell命令,最后熟悉HDFS操作常用的Java API。 本次上机练习的实验平台是Linux操作系统,使用Hadoop 1.2.1或以上版本,JDK 1.6或以上...
根据实际需求,可以通过配置`Configuration`对象来调整HDFS操作的性能,例如设置缓冲区大小、超时时间等。 以上就是使用Java API操作HDFS的基本步骤和注意事项。实践中,你可能还需要考虑更多的细节,如错误处理、...