HDFS是文件系统,就可以对其文件进行操作,比如说新建、删除、读取文件内容等操作。下面使用JAVA API对HDFS中的文件进行操作的过程。
对分HDFS中的文件操作主要涉及一下几个类:
Configuration类:该类的对象封转了客户端或者服务器的配置。
FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。
FileSystem fs = FileSystem.get(conf);通过FileSystem的静态方法get获得该对象,此类是抽象类得到的是DistributedFileSystem。
FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入输出流。分别通过FileSystem的open方法和create方法获得。
简单示例:
package com.test.hadoop.hdfs;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
public class HDFSDemo {
private FileSystem fs = null;
/**
* 首先创建filesystem的实现类,他是一个工具类,伪装为root用户,否则没有权限
*/
@Before
public void init(){
try {
URI uri = new URI("hdfs://hadoop:9000");
Configuration conf = new Configuration();
fs = FileSystem.get(uri, conf ,"root");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件上传
*/
@Test
public void testUpload(){
try {
//读取本地文件系统
InputStream in = new FileInputStream("G://scrt73-x64.exe");
//上传到hdfs中的文件位置,名称
Path path = new Path("/test.exe");
//返回输出流
OutputStream out = fs.create(path);
//将输入拷贝到输出,
IOUtils.copyBytes(in, out, 4096, true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件下载,不适用输入输出流的形式
*/
@Test
public void testDownls(){
Path src = new Path("/test.exe");
Path dst = new Path("G://aa.ext");
try {
//将hdfs中的src拷贝到本地文件新dst,实现下载
fs.copyToLocalFile(src, dst);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除文件
*/
@Test
public void delete(){
Path path = new Path("/jdkjdk");
try {
//false,true是否递归删除
boolean status = fs.delete(path, false);
System.out.println(status);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 创建文件夹
*/
@Test
public void testMkdir(){
Path path = new Path("/temp");
try {
boolean status = fs.mkdirs(path);
System.out.println(status);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 文件下载
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
URI uri = new URI("hdfs://hadoop:9000");
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(uri, conf);
Path path = new Path("/log");//hdfs中
InputStream in = fs.open(path);
//linux中--window
OutputStream out = new FileOutputStream("G://xx.xx");
IOUtils.copyBytes(in, out, 4096, true);
}
}