一、DFS
DFS是一个分布式文件存储系统。
二、DFS常用操作命令
创建目录
hadoop dfs -mkdir /home上传文件或目录到hdfs
hadoop dfs -put hello /
hadoop dfs -put hellodir/ /查看目录
hadoop dfs -ls /- 创建一个空文件
hadoop dfs -touchz /361way 删除一个文件
hadoop dfs -rm /361way删除一个目录
hadoop dfs -rmr /home重命名
hadoop dfs -mv /hello1 /hello2查看文件
hadoop dfs -cat /hello将制定目录下的所有内容merge成一个文件,下载到本地
hadoop dfs -getmerge /hellodir wa使用du文件和目录大小
hadoop dfs -du /将目录拷贝到本地
hadoop dfs -copyToLocal /home localdir查看dfs的情况
hadoop dfsadmin -report
三、DFS常用类
Java本地文件操作类和DFS文件操作类对比:
操作说明 | 操作本地文件 | 操作DFS文件 |
---|---|---|
主要命名空间 | java.io.File | org.apache.hadoop.conf.Configuration |
初使化对象 | new File(路径); | Configuration |
创建文件 | File.createNewFile(); | FSDataOutputStream = hdfs.create(path) |
创建文件夹 | File.mkdir(); | hdfs.mkdirs(Path); |
读文件 | new FileInputStream(); FileInputStream.read(buffer) | FSDataInputStream = hdfs.open(path); |
写文件 | FileOutputStream.write( | FSDataOutputStream = hdfs.append(path) |
删除文件(夹) | File.delete() | FileSystem.delete(Path) |
列出文件夹内容 | File.list(); | FileSystem.listStatus() |
重命名文件(夹) | File.renameTo(File) | FileSystem.rename(Path, Path) |
.
四、编程实现
3.1 创建工程
过程略。
3.2 编写写文件代码
package hdp.test;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class UploadFileToDFS {
// 往DFS文件系统中的指定文件写入指定内容
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://localhost:9000");
try {
FileSystem hdfs = FileSystem.get(conf);
// 目的文件,如果不存在则创建
Path path = new Path("/user/wcinput/README1.txt");
FSDataOutputStream outputStream = hdfs.create(path);
// 写入目的文件的内容
byte[] buffer = " These are new content of this file!".getBytes();
// 开始写入
outputStream.write(buffer, 0, buffer.length);
outputStream.flush();
outputStream.close();
System.out.println("Create OK");
} catch (IOException e) {
e.printStackTrace();
}
}
}
编译,运行。
在DFS文件系统中,我们会看到新的文件newFile.txt,如下图示:
查看文件newFile.txt内容:
正是我们在代码中写入的内容。
扩展该程序,可以上传文件功能。
3.3 读文件
package hdp.test;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class ReadFileFromDFS {
// 从DFS文件系统中读取指定文件
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://localhost:9000");
int size = 0;
byte[] buffer = new byte[128];
StringBuffer stringBuffer = new StringBuffer();
try {
FileSystem hdfs = FileSystem.get(conf);
// 从DFS读取文件
Path pathRead = new Path("/user/wcinput/newFile.txt");
FSDataInputStream fileInputStream = hdfs.open(pathRead);
// 开始读取
while ((size = fileInputStream.read(buffer)) != 0 && size != -1) {
stringBuffer.append(new String(buffer, 0, size));
}
fileInputStream.close();
System.out.println("" + stringBuffer);
System.out.println("Read successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
编译,运行。 查看打印:
log4j:WARN No appenders could be found for logger (org.apache.hadoop.conf.Configuration.deprecation).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
**These are new content of this file!**
Read successfully!
扩展该程序,可以下载文件功能。
3.4 删除文件
package hdp.test;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class DeleteFileDFS {
// 从DFS文件系统中删除指定文件
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://localhost:9000");
try {
FileSystem hdfs = FileSystem.get(conf);
Path path = new Path("/user/wcinput/newFile.txt");
hdfs.delete(path);
hdfs.close();
System.out.println("Delete file successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
编译,运行。
刷新DFS文件系统,发现:newFile.txt这个文件不见了。说明删除成功!
四、结尾
本文讲述了如何用java代码来实现DFS文件操作(读、写、删),实现其他操作也是类似的道理。